class C
@v = 1
def hi
'hi'
end
class << self
attr_reader :v
def ho
'ho'
end
end
end
C.methods(false)
#=> [:v, :ho]
C.ho
#=> "ho"
C.v
#=> 1
class C
@v = 1
def hi
'hi'
end
def self.ho
'ho'
end
singleton_class.class_eval do
attr_reader :v
end
end
C.methods(false)
#=> [:v, :ho]
C.ho
#=> "ho"
C.v
#=> 1
class << self
singleton_class.class_eval
原因
self
改变
C
C.singleton_class
. 假设有一个关键字
singleton_class
这也做了同样的事情,让我们可以写下面的内容。
class C
@v = 1
def hi
'hi'
end
singleton_class
attr_reader :v
def ho
'ho'
end
end
C.methods(false)
#=> [:v, :ho]
C.ho
#=> "ho"
C.v
#=> 1
一个可以有另一个关键字,将允许
翻来覆去
和它的singleton类,但它可能是最简单的,需要在
独生子女班
与singleton类相关。
独生子女班
和同名的局部变量或方法。例如,考虑关键字的使用
private
是一个关键词不正确;这就是方法
Module#private
class C
def m
private = 'hi'
private
end
private :m
private
def private
'ho'
end
end
c = C.new
c.m
#=> NoMethodError (private method `m' called...
c.send :m
#=> "hi"
c.private
#=> NoMethodError (private method `private' called...
c.send :private
#=> "ho"
我的问题在标题中给出了。您还可以自由地就Ruby是否会从引入以这种方式使用的关键字中获益发表意见。