谁能告诉我 Rails 中这两种变量赋值方法之间的区别



我正在阅读Michael Hartl的Rails教程书,我发现了这个变量赋值语句:cookies.permanent[:remember_token] = remember_token与这个变量赋值语句不同:remember_token = cookies.permanent[:remember_token]。 这些行取自下面的此函数,用于将用户登录到 Web 应用程序。

def sign_in(user)
    remember_token = User.new_remember_token
    cookies.permanent[:remember_token] = remember_token
    user.update_attribute(:remember_token, User.encrypt(remember_token))
    self.current_user = user
end

下面是一些附加代码,可帮助您了解此处发生的情况。

def signed_in?
  !current_user.nil?
end
def sign_out
  self.current_user = nil
  cookies.delete(:remember_token)
end
def current_user=(user)
  @current_user = user
end
def current_user
  remember_token = User.encrypt(cookies[:remember_token])
  @current_user ||= User.find_by(remember_token: remember_token)
end

sign_in(user)是这样写的:cookies.permanent[:remember_token] = remember_token Web 应用程序允许我在单击注销链接时注销,但是当变量从左侧分配时,如下所示:remember_token = cookies.permanent[:remember_token],我根本无法注销。 谁能告诉我 Rails 如何解释这两个不同的赋值语句?

任何帮助将不胜感激! 谢谢!

它对 Rails 没有什么特别之处。如果您对某些编程语言知之甚少,您应该注意到:

foo = bar

表示将 bar 的计算值分配给名为 foo 的变量。这与

bar = foo

这意味着将 foo 的计算值分配给名为 bar 的变量。

通常,编程初学者将这种=作为赋值与数学中使用的相等=混淆。但在编程中,平等是==的,而不是=的。


在你的问题中,

cookies.permanent[:remember_token] = remember_token

甚至与变量赋值不同。假设cookies.permanent是一个哈希,它将值remember_token分配给该哈希中的键:remember_token

remember_token = cookies.permanent[:remember_token]

另一方面,将cookies.permanent[:remember_token]分配给名为 remember_token 的变量。

这两个

语句是两个完全不同的操作。

对于cookies.permanent[:remember_token] = remember_token,您将变量remember_token的值分配给 :remember_tokencookies.permanent哈希中的键。

对于remember_token = cookies.permanent[:remember_token],您正在检索cookies.permanent哈希中键:remember_token的值,并将其存储在名为 remember_token 的变量中。

最新更新