已经有一段时间没有使用 Ruby 了,遇到了一些不熟悉的语法:
class AddQuantityToLineItems < ActiveRecord::Migration[5.1]
[5.1]
似乎强制使用特定的 ActiveRecord::Migration 版本?这个语法叫什么?在哪里可以找到它的文档?
谢谢!
最佳答案
这是一个熟悉的语法,但在这个位置上却很陌生,仅此而已。基类说明符允许是一个表达式,其中可以包含方法调用。
以下是重现这种情况的方法:
class CrazyProxyClass
def [](v)
Class.new
end
end
CrazyMethod = CrazyProxyClass.new
class CrazyDerived < CrazyMethod[1.2]
end
CrazyDerived.new
# => CrazyDerived
您还可以变得更加冒险:
class NormalBase
end
class DebugBase < NormalBase
end
class Example < (ENV['DEBUG'] ? DebugBase : NormalBase)
end
唯一的限制是您的想象力和像 Rubocop 这样的工具,它们会告诉您发疯可能是个坏主意。唯一真正的义务是,无论该表达式返回什么,都是一个类,否则您将得到一个“父类(super class)必须是一个类”的异常。
关于ruby-on-rails - 此括号语法的 Ruby 2.4 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45448251/