我正在尝试学习Ruby和Rails,我正在研究Michael Hartl的RailsTutorial.org。在第7章或第8章中,他正在研究会话,我认为他正在使用方法调用作为函数的参数,但我并不完全确定它。这不是我以前见过的东西。
请查看下面“私人”部分中的第一个函数,其中参数为remember_token
。这是否意味着函数remember_token
的返回值成为User.authenticate_with_salt
的参数?
def current_user
@current_user ||= user_from_remember_token
end
def signed_in?
!current_user.nil?
end
private
def user_from_remember_token
User.authenticate_with_salt(*remember_token)
end
def remember_token
cookies.signed[:remember_token] || [nil, nil]
end
答案 0 :(得分:1)
正确。
它也是“splatted”(*
),意味着返回值(cookie位,或[nil, nil]
数组,如果没有cookie)从数组中解压缩,并作为两个单独发送参数(大致)到User.authenticate_with_salt
。
答案 1 :(得分:0)
正如@DaveNewton所说,正在使用ruby的“splat”运算符。
你可以用splat做很多事情,所以这里有a blog一些很好的例子。
要记住的一点是,splat既可以在定义方法时使用,也可以在调用方法时使用。
# when defining a method
def my_method(name, age, *everything_else)
...
end
# when calling a method
some_info = other_method(*stuff)