我是NOOB试图理解一些代码。
这个self.class.current_section有什么作用?
class MyClass
class << self
def current_section(*section)
if section.empty?
@current_section
else
@current_section = section[0]
end
end
end
def current_section()
self.class.current_section
end
def current_section=(section)
self.class.current_section(section)
end
end
答案 0 :(得分:3)
self
返回当前对象。
self.class
返回当前对象的类。
self.class.current_section
调用当前对象类的方法(该方法称为current_section
)。
def current_section()
p self
p self.class
end
current_section()
答案 1 :(得分:1)
它将对象接收的消息(方法调用请求)转发到相应的类。
假设你有一个班级
class MyClass
def MyClass.current_section
puts "I'm the class method."
end
def current_section
self.class.current_section
end
end
h = MyClass.new
h.current_section # outputs "I'm the class method."
调用h
的方法,它会查找h
的类(MyClass
)并调用该类的方法current_section
。
因此,根据上面的定义,类MyClass
的每个对象都有一个方法current_section
,该方法被路由到该类的中心current_section
。
你的问题中类方法的定义只是使用不同的语法来做同样的事情:向类对象添加一个方法。
答案 2 :(得分:1)
class << self
def current_section(*section)
if section.empty?
@current_section
else
@current_section = section[0]
end
end
end
由于class << self
语句,此代码部分正在类对象范围内进行评估。因此current_section
被定义为类方法,可以作为Myclass.current_section.
def current_section()
self.class.current_section
end
这部分只是实例方法的定义,因此self
是Myclass
对象的实例。
self.class
获取此类实例的类,因此Myclass
,并调用该类的current_section方法。