ruby-on-rails - 此括号语法的 Ruby 2.4 文档

标签 ruby-on-rails ruby

已经有一段时间没有使用 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/

相关文章:

ruby-on-rails - Rspec - 未初始化的常量 RAILS_ENV

ruby-on-rails - 在 Rails View 中避免 nil

ruby-on-rails - 我修复了一个失败的 rails 迁移,但为什么这个修复有效?

css - 使用 String.split inline 在 View 中设置 CSS 类

ruby-on-rails - RoR Mailboxer Monkey Patch 只工作了几次

ruby-on-rails - 用方法定位索引

ruby-on-rails - 字符串插值不适用于 Ruby heredoc 常量

ruby - 用于匹配 <blockquote> 和 </blockquote> 之间的单词的正则表达式

ruby-on-rails - 如何在 Rails 中为字段设置显示名称

ruby-on-rails - 未定义的方法 `scan' 为 {"tooth"= >""} :Hash