我应该如何理解ruby中的标识符?
我正在学习Michael Hartl的RoR教程。以下是SessionHelper中的一些代码:我应该如何理解ruby中的标识符?,ruby,variables,syntax,accessor,Ruby,Variables,Syntax,Accessor,我正在学习Michael Hartl的RoR教程。以下是SessionHelper中的一些代码: module SessionsHelper def sign_in(user) cookies.permanent[:remember_token] = user.r
module SessionsHelper
def sign_in(user)
cookies.permanent[:remember_token] = user.remember_token
self.current_user = user
end
def current_user=(user)
@current_user = user
end
def current_user
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
def current_user?(user)
user == current_user
end
def signed_in?
!current_user.nil?
end
def sign_out
self.current_user = nil
cookies.delete(:remember_token)
end
end
从这段代码中我有很多东西不明白
- 在方法
中,current\u user?
是变量还是调用方法current\u user
current\u user
- 在方法
中,current\u user
是一个实例变量。它是什么的实例变量(即什么类?)@current\u user
登录(用户)
方法,可以看到self.current\u user
被分配了对象user
的值。但是(假设self属于UsersController类,因为UsersController
并且在ApplicationController
的定义中有一行包含SessionHelper
)对于self
对象,没有实例变量current\u user
的定义
- 为什么在
中我们使用current\u user=
而在@current\u user
current\u user中我们只使用
current\u user
@current\u user
,current\u user
,:current\u user
。我最熟悉C、C++、PHP、java、JavaScript。如果有类似的语言,这将帮助我更好地理解正在发生的事情
在方法current_user?中,current_user是一个变量还是一个变量
调用当前用户的方法
这就是方法,因为范围中没有该名称的词法
在方法current_user中,@current_user是一个实例变量。
它是什么的实例变量(即什么类?)
它是任何类的实例的实例变量,该类在模块sessionhelper
中混合使用(通常与包含sessionhelper
)
如果查看sign_in(user)方法,可以看到self.current_user被分配了对象的值
用户。但是(假设self属于UsersController类),因为
UsersController<应用程序控制器,在
ApplicationController有一行包含SessionHelper)
当前用户的实例变量current_user没有定义
自我客体
sign\u in
与setter方法current\u user=
一起在本模块中定义self.current\u user=user
将使用参数user
向self
发送消息:current\u user=
。由于sign_in来自此模块,因此消息分派很可能会发送到此模块中定义的setter,尽管相同名称的setter可能由包含此模块的类定义,或者由包含在此模块之后的模块定义,在这种情况下,将首先在分派搜索中找到这些方法
How come in current_user=我们使用@current_user,但在
当前用户?我们只使用当前用户
当setter和getter方法(有时还有initialize)被定义时,将直接实例变量访问限制到它们被认为是一种很好的做法。在这种情况下,通过重用current\u user?
谓词中的current\u user
getter,我们保留了getter中@current\u user | |=user.find\u by…
表达式的缓存或获取行为
在方法current_user?中,current_user是一个变量还是一个变量
调用当前用户的方法
这就是方法,因为范围中没有该名称的词法
在方法current_user中,@current_user是一个实例变量。
它是什么的实例变量(即什么类?)
它是任何类的实例的实例变量,该类在模块sessionhelper
中混合使用(通常与包含sessionhelper
)
如果查看sign_in(user)方法,可以看到self.current_user被分配了对象的值
用户。但是(假设self属于UsersController类),因为
UsersController<应用程序控制器,在
ApplicationController有一行包含SessionHelper)
当前用户的实例变量current_user没有定义
自我客体
sign\u in
与setter方法current\u user=
一起在本模块中定义self.current\u user=user
将使用参数user
向self
发送消息:current\u user=
。由于sign_in来自此模块,因此消息分派很可能会发送到此模块中定义的setter,尽管相同名称的setter可能由包含此模块的类定义,或者由包含在此模块之后的模块定义,在这种情况下,将首先在分派搜索中找到这些方法
How come in current_user=我们使用@current_user,但在
当前用户?我们只使用当前用户
当setter和getter方法(有时还有initialize)被定义时,将直接实例变量访问限制到它们被认为是一种很好的做法。在这种情况下,通过重用
current\u user?
谓词中的current\u user
getter,我们保留了@current\u user | |=user.find\u by…
表达式在getter中的缓存或获取行为。这是面向对象编程中的一个基本概念,称为。您有一个变量@current\u user
,但您不直接使用该变量。您可以通过名为getter和setter的方法使用它。吸气剂