在ruby中调用Klass :: []和Klass []之间有区别吗?

时间:2014-10-02 03:28:39

标签: ruby

这适用于Hash [...],这与Hash :: [...]非常相似。但这如何在内部发挥作用 - 是否存在差异?而且,Klass []是否有效,因为方法名称以特殊字符开头?我们可以有一个名为“test”的自我方法,我们绝对不能做Klasstest。

帮助我了解这在ruby内部是如何工作的。

1 个答案:

答案 0 :(得分:3)

更正了以下来自JörgWMittag的建议

最常见的形式是:

receiver.method_name(arg)

如果没有常量名称的歧义,则上面的表格可以替换为:

receiver::method_name(arg)

您可以省略括号:

receiver::method_name arg
receiver.method_name arg

对于适合某种模式的方法名称,有一种语法糖,允许其他方式编写。

  • 如果方法名称为==!=<><=>=,{{1 }},<=>===***/+,然后就可以写了

    -
  • 如果方法名称为receiver method_name arg ,则可以编写

    some_attribute=
  • 如果方法名称为receiver.some_attribute = arg ,则可以编写

    []

有一种特殊的模式。如果方法名称为receiver[arg] ,则唯一的写入方式是

some_prefix@