方法调用为参数?

时间:2011-11-25 02:59:35

标签: ruby-on-rails ruby

我正在尝试学习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

2 个答案:

答案 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)