class << Awesomeness
这个
<<
是做什么用的?我搜索了,但是结果只告诉我有关字符串连接的信息... 最佳答案
确实有人说class << something
是单例类的语法,正如其他人所说,它最常用于在类定义中定义类方法。但是这两种用法是一致的。就是这样。
Ruby允许您通过执行以下操作将方法添加到任何特定实例:
class << someinstance
def foo
"Hello."
end
end
这将
foo
方法添加到某个实例,而不是添加到其类,而是添加到该特定实例。 (实际上,将foo添加到实例的“singleton类”中,但这或多或少是一个实现怪癖。)执行以上代码后,可以将foo方法发送给某些实例:someinstance.foo => "Hello."
但您不能将foo发送到同一类的其他实例。这就是
<<
名义上的用途。但是人们更普遍地将此功能用于语法体操,例如:class Thing
def do_something
end
class << self
def foo
puts "I am #{self}"
end
end
end
当此代码(此类定义)执行时,
self
是什么?这是Thing
类。这意味着class << self
与说“在Thing类中添加以下方法”相同。也就是说,foo是一个类方法。完成上述操作后,您可以执行以下操作:t = Thing.new
t.do_something => does something
t.class.foo => "I am Thing"
t.foo => NoMethodError: undefined method `foo'
当您考虑
<<
在做什么时,这一切都是有道理的。这是追加到特定实例的一种方法,在通常情况下,追加到的实例是一个类,因此该块中的方法成为类方法。简而言之,这是在类定义块中创建类方法的简洁方法。另一种方法是这样做:
class Thing
def self.foo
# ...
end
end
一样。您的示例实际上是一个语法错误,但是如果您了解
<<
与实例和class关键字一起使用的方式,那么您将知道如何更正它。关于ruby - Ruby类继承: `<<`(小于两倍)是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6182628/