方法语法导致混淆

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中的方法名称中。 按照惯例,前者表示要返回的布尔值,后者表示“危险”方法(例如,修改对象而不是返回副本)。

*将传递给方法的内容包装到数组中。 它在调用方法时也有效,然后解包数组。

|| 简单的逻辑或; 如果第一个操作数的计算结果为nilfalse ,则返回另一个操作数。 通常你可能会发现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