ruby - 在 ruby​​ 中调用 Klass::[] 和 Klass[] 有区别吗?

标签 ruby

这适用于 Hash[...],这与 Hash::[...] 非常相似。但这在内部是如何工作的——有区别吗?而且,Klass[] 是否因为方法名称以特殊字符开头而起作用?我们可以有一个名为“test”的 self 方法,但我们绝对不能做 Klasstest。

帮助我了解它在 ruby​​ 中的内部工作原理。

最佳答案

更正了 Jörg W Mittag 的建议

最一般的形式是:

receiver.method_name(arg)

当常量名称没有歧义时,上面的形式可以替换为:

receiver::method_name(arg)

您可以省略括号:

receiver::method_name arg
receiver.method_name arg

对于符合特定模式的方法名称,有语法糖允许使用其他方式编写。

  • 如果方法名是== , != , < , > , <= , >= , <=> , === , ** , * , / , + , 或 - , 那么你可以写

    receiver method_name arg
    
  • 如果方法名是some_attribute= , 那么你可以写

    receiver.some_attribute = arg
    
  • 如果方法名是[] , 那么你可以写

    receiver[arg]
    

有一个特殊的模式。如果方法名称是 some_prefix@ , 那么唯一的写法就是

    some_prefixreceiver

关于ruby - 在 ruby​​ 中调用 Klass::[] 和 Klass[] 有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26154099/

相关文章:

ruby-on-rails - 将 RSpec 与 Ruby on Rails 结合使用的国际字符

javascript - (Ruby、Rails、Javascript)使用 javascript 窗口等管理嵌套模型...?

ruby-on-rails - 如何在 heroku worker 中捕获内存配额异常

mysql - 如何为 Rails 中已存在的表创建迁移

mysql - Ruby on Rails - Mysql2::错误:无法连接到 'localhost' 上的 MySQL 服务器 (10061)

ruby - 顶级类文档

php - 用于部署的语言/堆栈

ruby - 无法加载此类文件 -- smarter_csv (LoadError)

ruby-on-rails - 有没有办法在带有 rails 的 yaml 中引用常量?

ruby - 为什么 Ruby 给出错误 "point is not on curve"?