繁体   English   中英

谁能告诉我Rails中这两种变量分配方法之间的区别?

[英]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_tokencookies.permanent散列,并且将其存储在一个指定的变量remember_token

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM