![](/img/trans.png)
[英]Can you tell me about any methods that Rails adds to existing Ruby classes?
[英]Can anyone tell me the different between these two variable assignment methods in 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
在关键cookies.permanent
的散列:remember_token
。
对于remember_token = cookies.permanent[:remember_token]
要检索的项的值:remember_token
在cookies.permanent
散列,并且将其存储在一个指定的变量remember_token
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.