首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单例方法与类方法

问单例方法与类方法
EN

Stack Overflow用户
提问于 2015-12-23 06:13:50
回答 4查看 9.1K关注 0票数 12

类方法和单例方法是相同的还是不同的?下面是一个例子。

代码语言:javascript
复制
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>
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-12-23 06:28:16

在Ruby中发生的大多数事情都涉及类和模块,包含实例方法的定义

代码语言:javascript
复制
class C
  def talk
    puts "Hi!"
  end
end

c = C.new
c.talk
Output: Hi!

但是,正如您在前面看到的(甚至比您在类中看到的实例方法更早),您还可以直接在单个对象上定义单例方法:

代码语言:javascript
复制
obj = Object.new
def obj.talk
  puts "Hi!"
end
obj.talk
#Output: Hi!

在给定对象上定义单例方法时,只有该对象才能调用该方法。正如您已经看到的,最常见的单例方法类型是class方法--一种以单独的方式添加到Class对象中的方法:

代码语言:javascript
复制
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以获取乐趣和利润

希望这能帮你!

票数 23
EN

Stack Overflow用户

发布于 2015-12-23 06:29:49

没有什么不同。Ruby中没有类方法。如果对象恰好是Class类的一个实例,那么“类方法”就是我们人类称为单例方法的一个名称。

票数 22
EN

Stack Overflow用户

发布于 2015-12-23 06:22:26

在ruby类中也是一个对象。因此,在您的示例中,classmethod是对象C的单例方法,singletonmethod是对象c的单例方法。

我强烈推荐Paolo Perrotta的“元编程Ruby”一书。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34429693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档