8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

Ruby 中的单例类是什么?

divyang4481 1月前

87 0

我无法理解 Ruby 中的特征类或单例类的概念。我读到过很多文章说特征类是类的类。这对我来说毫无意义,因为对我来说,类的类是

我无法理解 特征类 单例类 。我读到过很多文章说特征类 是类的类 。这对我来说毫无意义,因为对我来说,类的类 Class 实际上是类的实例 Class .

我不太明白的另一件事是以下陈述:类方法实际上是类特征类的实例方法。特征类可以通过以下方式访问:

YourClass = Class.new
class << YourClass
  def class_method
  end
end

但是,如果特征类确实是 YourClass 类(即 Class ),那么前面的代码片段难道不应该打开该类 Class 并向其添加实例方法, class_method 使得它的所有未来实例(即将来定义的任何常规类)都可以访问它吗?

我实际上觉得单例类与不一样 Class 。当你这样做时:

class MyClass
end

MyClass.singleton_class

你得到的 #<Class:MyClass> 结果与 MyClass.class => Class

是什么 #<Class:MyClass> ?这与命名空间无关,否则会有两个: Class::MyClass ...

我正在寻找特征类概念的简单且明确的解释,以澄清我的想法。

帖子版权声明 1、本帖标题:Ruby 中的单例类是什么?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由divyang4481在本站《ruby》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 好吧,您可以轻松检查 obj = Object.new; def obj.bar; end; obj.bar; obj2 = Object.new; obj2.bar # NoMethodError 之类的代码是否适用于所有对象。方法 obj.bar 只能存在于 obj 的单例类中。(实际上,有一些对象不能有单例方法,例如 Symbols、Floats 和 Integers。真正的原因是它们在运行时没有实现为对象,因此甚至没有类,更不用说单例类了。但对于我们的语义模型,我们仍然可以假装它们有一个冻结的单例类。)

返回
作者最近主题: