我正在阅读 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
当我点击标志时,网络应用程序允许我退出out 链接,但是当像这样从左侧分配变量时: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
的变量。
关于ruby-on-rails - 谁能告诉我 Rails 中这两种变量赋值方法的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20020255/