方法语法导致混淆
def current_user=(user) @current_user = user end def user_from_remember_token User.authenticate_with_salt(*remember_token) end def remember_token cookies.signed[:remember_token] || [nil, nil] end
1)我大多与def current_user =(用户)混淆。 什么是= for。 我看到它将用户对象作为参数,但是=符号的重点是什么。
2)不确定为什么有一个* infront remember_token。 有谁能解释一下?
谢谢
方法名称末尾的=
是一个语法糖,用于分配值的方法。 由于括号在Ruby中是可选的,因此可以编写foo.current_user = (bar)
或foo.current_user = bar
。 请注意,后者看起来更自然。 另请注意,您可以使用attr_writer :current_user
。
你也可以用?
而且!
在Ruby中的方法名称中。 按照惯例,前者表示要返回的布尔值,后者表示“危险”方法(例如,修改对象而不是返回副本)。
*
将传递给方法的内容包装到数组中。 它在调用方法时也有效,然后解包数组。
||
简单的逻辑或; 如果第一个操作数的计算结果为nil
或false
,则返回另一个操作数。 通常你可能会发现foo ||= "bar"
,这意味着foo
将得到“bar”的值,除非它有一个值( foo = foo || "bar"
)。
Ruby是一种很好的语言,有很多这样的怪癖。 Rubyist是值得一游的页面。
current_user=(user)
是一个允许你做某事的something.current_user = foo
。 相应的getter将是current_user
并且看起来像
def current_user @current_user end
current_user之前的=符号引用attr_writer方法。
它的意思是
def current_user=(user) @current_user = user end
对于参考:
http://www.rubyist.net/~slagell/ruby/accessors.html http://apidock.com/ruby/Module/attr_writer http://ruby-doc.org/core/classes/Module.html