这不是一个赋值操作。在 Ruby 中,使用赋值运算符=
来进行赋值操作,如下:
var = val
你可能在想一些Lisp方言,其中赋值看起来像这样:
(def var val)
这只是一个简单的无接收方消息发送。
在Ruby中,消息发送的一般语法为
receiver.selector(argument1, argument2)
然而,如果receiver
是self
,你可以省略receiver
,因此
selector(argument1, argument2)
等同于
self.selector(argument1, argument2)
[注意:这并不完全正确。在 Ruby 中,私有方法只能通过无接收者的消息发送来调用,因此如果在此示例中 self
通过调用私有方法响应 selector
消息,则仅第一种变体将起作用,第二种将引发 NoMethodError
异常。]
此外,在没有歧义的情况下,您可以省略参数周围的括号,就像这样:
receiver.selector argument1, argument2
如果将这两个东西组合在一起,你现在可以看到
selector argument1, argument2
等同于
self.selector(argument1, argument2)
因此
from "Some text for this field"
等同于
self.from("Some text for this field")
在 Ruby 的消息发送语法中,有第三个快捷方式:如果消息发送的最后一个参数是一个
Hash
字面量,则可以省略花括号。因此,上面示例中的最后一行也可以写成:
body :user => user, :url => "http://example.com/login"
此外,在 Ruby 1.9 中,如果所有键都是符号(Symbol),则可以使用另一种哈希(Hash)字面量语法来编写哈希字面量。
{ key1: val1, key2: val2 }
与旧语法相同
{ :key1 => val1, :key2 => val2 }
这意味着,至少在 Ruby 1.9 中,最后一行也可以写成
body user: user, url: "http://example.com/login"
ActionMailer
上下文中遇到第一个无接收者消息发送是相当不寻常的。对于我所知道的大多数Rails开发人员来说,第一个无接收者消息发送是在ActiveRecord
上下文中的has_many
和belongs_to
。 - Jörg W Mittag