Ruby on rails 方法调用作为参数?
我正在尝试学习Ruby和Rails,我正在查看Michael Hartl的RailsTutorial.org。在第7章或第8章中,他正在处理会话,我认为他使用方法调用作为函数的参数,但我不完全确定。这不是我以前见过的东西 请查看下面“private”部分中的第一个函数,其中的参数是Ruby on rails 方法调用作为参数?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在尝试学习Ruby和Rails,我正在查看Michael Hartl的RailsTutorial.org。在第7章或第8章中,他正在处理会话,我认为他使用方法调用作为函数的参数,但我不完全确定。这不是我以前见过的东西 请查看下面“private”部分中的第一个函数,其中的参数是记住\u token。这是否意味着函数记住\u标记的返回值将成为用户的参数。使用\u salt对\u进行身份验证 def current_user @current_user ||= user_from_rem
记住\u token
。这是否意味着函数记住\u标记
的返回值将成为用户的参数。使用\u salt对\u进行身份验证
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
对
它也是“splatted”(即
*
),意思是返回值(cookie位,或者[nil,nil]
数组,如果没有cookie)从数组中解压出来,并作为两个单独的参数(大致)发送给用户。使用@DaveNewton提到的ruby的“splat”操作符使用salt验证
使用splat可以做很多事情,下面是一些很好的例子
需要记住的一点是,splat既可以在定义方法时使用,也可以在调用方法时使用
# when defining a method
def my_method(name, age, *everything_else)
...
end
# when calling a method
some_info = other_method(*stuff)
也许很明显,但让这看起来如此奇怪的不是splat操作符,而是没有任何东西表明记住\u token
是一种方法。在大多数其他语言中,您需要执行记住\u token()
或其他操作来区分方法和变量。