Ruby on rails 导致混淆的方法语法

Ruby on rails 导致混淆的方法语法,ruby-on-rails,ruby,Ruby On Rails,Ruby,1) 我对def current\u user=(user)最为困惑。这是干什么用的。我看到它将用户对象作为参数,但是=符号的意义是什么 2) 不确定为什么在记住标记前面有一个*。有人能解释一下吗 感谢当前用户使用attr\u writer方法之前的=符号 这意味着 def current_user=(user) @current_user = user end def user_from_remember_token User.authenticate_with_salt(*

1) 我对def current\u user=(user)最为困惑。这是干什么用的。我看到它将用户对象作为参数,但是=符号的意义是什么

2) 不确定为什么在记住标记前面有一个*。有人能解释一下吗


感谢当前用户使用attr\u writer方法之前的=符号

这意味着

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
参考:

 def current_user=(user)
     @current_user = user
 end

当前用户引用attr\u writer方法之前的=符号

这意味着

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
参考:

 def current_user=(user)
     @current_user = user
 end
current\u user=(user)
是一个setter,允许您执行
操作。current\u user=foo
。相应的getter应该是当前用户

http://www.rubyist.net/~slagell/ruby/accessors.html    
http://apidock.com/ruby/Module/attr_writer
http://ruby-doc.org/core/classes/Module.html
current\u user=(user)
是一个setter,允许您执行
操作。current\u user=foo
。相应的getter应该是当前用户

http://www.rubyist.net/~slagell/ruby/accessors.html    
http://apidock.com/ruby/Module/attr_writer
http://ruby-doc.org/core/classes/Module.html

方法名称末尾的
=
是一种语法糖,用于赋值的方法。由于括号在Ruby中是可选的,因此可以编写
foo.current\u user=(bar)
foo.current\u user=bar
。请注意,后者看起来更自然。还请注意,您可以使用
attr\u writer:current\u user

您还可以使用
。按照惯例,前者表示要返回的布尔值,后者表示“危险”方法(例如,修改对象而不是返回副本的方法)

*
将传递给方法的内容包装到数组中。当调用一个方法,然后打开一个数组时,它也起作用

|
是简单的逻辑or;如果第一个操作数的计算结果为
nil
false
,则将返回另一个操作数。通常,您可能会发现
foo | |=“bar”
,这意味着
foo
将获得“bar”的值,除非它有一个值(
foo=foo | |“bar”


Ruby是一种很棒的语言,有很多这样的怪癖。是一个值得访问的页面。

方法名称末尾的
=
是一个用于赋值方法的语法糖。由于括号在Ruby中是可选的,因此可以编写
foo.current\u user=(bar)
foo.current\u user=bar
。请注意,后者看起来更自然。还请注意,您可以使用
attr\u writer:current\u user

您还可以使用
。按照惯例,前者表示要返回的布尔值,后者表示“危险”方法(例如,修改对象而不是返回副本的方法)

*
将传递给方法的内容包装到数组中。当调用一个方法,然后打开一个数组时,它也起作用

|
是简单的逻辑or;如果第一个操作数的计算结果为
nil
false
,则将返回另一个操作数。通常,您可能会发现
foo | |=“bar”
,这意味着
foo
将获得“bar”的值,除非它有一个值(
foo=foo | |“bar”


Ruby是一种很棒的语言,有很多这样的怪癖。是一个值得访问的页面。

TLDR版本
=
都只是方法名称中的合法字符。他们没什么特别的。约定在何时使用更重要。
=
可用于方法名称的末尾。虽然
irb
在声明名为
foo?bar
的方法时不会抱怨,但它会记住方法为
foo?
。非常感谢,你真的回答了我的问题!还是习惯了ruby。不过我听说了很多关于它的好东西:)这是一门很棒的语言,很容易学。有一本关于Ruby的好书。我强烈建议您阅读它(这个链接记录了Ruby 1.6,现在已经有些过时了;但是您周围的书店应该有它的最新版本)都只是方法名称中的合法字符。他们没什么特别的。约定在何时使用更重要。
=
可用于方法名称的末尾。虽然
irb
在声明名为
foo?bar
的方法时不会抱怨,但它会记住方法为
foo?
。非常感谢,你真的回答了我的问题!还是习惯了ruby。不过我听说了很多关于它的好东西:)这是一门很棒的语言,很容易学。有一本关于Ruby的好书。我极力推荐阅读它(链接文档是Ruby 1.6,现在已经有些过时了;但是你周围的书店应该有它的最新版本)。