Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 方法调用作为参数?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 方法调用作为参数?

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

我正在尝试学习Ruby和Rails,我正在查看Michael Hartl的RailsTutorial.org。在第7章或第8章中,他正在处理会话,我认为他使用方法调用作为函数的参数,但我不完全确定。这不是我以前见过的东西

请查看下面“private”部分中的第一个函数,其中的参数是
记住\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()
或其他操作来区分方法和变量。