类方法和单例方法是相同的还是不同的?下面是一个例子。
class C
def self.classmethod
puts "class method #{self}"
end
end
C.classmethod # class method C
c = C.new
def c.singletonmethod
puts "instance method #{self}"
end
c.singletonmethod # instance method #<C:0x0000000118ed08>发布于 2015-12-23 06:28:16
在Ruby中发生的大多数事情都涉及类和模块,包含实例方法的定义
class C
def talk
puts "Hi!"
end
end
c = C.new
c.talk
Output: Hi!但是,正如您在前面看到的(甚至比您在类中看到的实例方法更早),您还可以直接在单个对象上定义单例方法:
obj = Object.new
def obj.talk
puts "Hi!"
end
obj.talk
#Output: Hi!在给定对象上定义单例方法时,只有该对象才能调用该方法。正如您已经看到的,最常见的单例方法类型是class方法--一种以单独的方式添加到Class对象中的方法:
class Car
def self.makes
%w{ Honda Ford Toyota Chevrolet Volvo }
end
end但是任何对象都可以添加单例方法。在每个对象的基础上定义方法驱动行为的能力是Ruby设计的特征之一。
单例类
Singleton类是匿名的:虽然它们是类对象(类类的实例),但是它们会自动出现,而不会给出名称。不过,您可以打开单例类的类定义体,并向其添加实例方法、类方法和常量,就像对常规类一样。
注:
Every object has two classes:
它是一个实例的类
它的单例类
最后,我强烈建议你看。
1:关于singleton method vs. class method ruby的详细信息,Ruby对象模型与元编程
2:Dave Thomas - MetaProgramming -扩展Ruby以获取乐趣和利润
希望这能帮你!
发布于 2015-12-23 06:29:49
没有什么不同。Ruby中没有类方法。如果对象恰好是Class类的一个实例,那么“类方法”就是我们人类称为单例方法的一个名称。
发布于 2015-12-23 06:22:26
在ruby类中也是一个对象。因此,在您的示例中,classmethod是对象C的单例方法,singletonmethod是对象c的单例方法。
我强烈推荐Paolo Perrotta的“元编程Ruby”一书。
https://stackoverflow.com/questions/34429693
复制相似问题