【问题标题】:Ruby 2.4 documentation for this bracket syntax [duplicate]此括号语法的 Ruby 2.4 文档 [重复]
【发布时间】:2017-08-02 06:09:50
【问题描述】:

很久没用过Ruby了,遇到了一些不熟悉的语法:

class AddQuantityToLineItems < ActiveRecord::Migration[5.1]

[5.1] 似乎在强制使用特定的 ActiveRecord::Migration 版本?这个语法叫什么?在哪里可以找到它的文档?

谢谢!

【问题讨论】:

标签: ruby-on-rails ruby


【解决方案1】:

这是一种熟悉的语法,但在这个位置不熟悉,仅此而已。基类说明符可以是表达式,可以包含方法调用。

下面是一种重现这种情况的方法:

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 之类的工具会告诉您可能是个坏主意。唯一真正的义务是无论该表达式返回什么都是一个类,否则您将得到一个“超类必须是一个类”异常。

【讨论】:

    猜你喜欢
    • 2021-11-20
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 2019-01-13
    • 2011-09-24
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    相关资源
    最近更新 更多