ruby创建单例类的场景是什么

斯瓦普尼尔

我是红宝石的新手。我已经了解了ruby的单例类概念,但是我有一个问题,就是ruby在什么时候为对象创建了单例类。我的意思是当对象定义自己的方法(不在其祖先类或超类中)或在运行时创建对象时。我对这个概念很清楚,当一个类或对象将方法定义为它们自己的方法时,在该对象与其类之间插入一个匿名类,称为“单身类”。但是看看这个线程,类变量和类实例变量之间的区别?在栏杆回答中,他使用了类似

hello.singleton_class.class_variable_get(:@@class_var)

hello是Hello具有类变量的类的对象@@class_var为什么我们必须在其中使用'singleton_class'

hello.singleton_class.class_variable_get(:@@class_var)

在类中定义类变量时,是否还会插入单例类?

四个

如果看一下源代码,singleton_class您会发现它只是转发到C函数rb_singleton_class(至少对MRI有用)。如果您进一步深入研究您会发现一些C代码,这些代码基本上可以归结为针对特殊情况的一系列复杂测试,然后,如果一切顺利,则将创建singleton类。

从概念上讲,singleton_class顾名思义就是一个单例Class对象。由于每个行为良好的单例都将在首次访问时创建之所以发生这种情况,是因为您定义了单例方法,或者因为singleton_class显式访问完全取决于您的程序。对于大多数对象,永远不会调用它singleton_class,因此Class根本不会创建对象。如果不是这种情况,几乎就不值得由singleton机械师引起的开销

我认为您引用的答案的作者只是想举例说明访问@@class_var类变量的不同可能性因为class_variable_get是类的一种方法,所以Class他将需要该类的实例,并且由于单例类是从常规父类隐式派生的,因此可以使用它。在示例中,他可能还会使用

hello.class.class_variable_get(:@@class_var)

达到同样的效果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ruby创建单例类的场景是什么

来自分类Dev

创建线程安全单例的正确方法是什么?

来自分类Dev

静态类和单例类之间的主要区别是什么

来自分类Dev

为什么不能在Ruby的单例类定义中访问类实例变量?

来自分类Dev

PHP中的单例是什么?

来自分类Dev

C#-尝试创建单例类

来自分类Dev

为mongo创建单例类

来自分类Dev

为mongo创建单例类

来自分类Dev

在简单注入器中将两个接口注册为单例的类的行为是什么

来自分类Dev

在Managed C ++中,在类中定义静态单例实例的正确方法是什么?

来自分类Dev

在简单注入器中将两个接口注册为单例的类的行为是什么

来自分类Dev

Ruby元类:为什么在定义单例方法时要使用三个?

来自分类Dev

Ruby:单例类真的拥有匿名类吗?

来自分类Dev

为什么在Eager初始化中,在加载类时创建的单例类的实例可能会带来缺点?

来自分类Dev

为什么在Eager初始化中,在加载类时创建的单例类的实例可能会带来缺点?

来自分类Dev

Ruby模块可以描述为单例类吗?

来自分类Dev

Ruby on Rails:引用路由中的单例类动作

来自分类Dev

是什么使单例线程不安全?

来自分类Dev

在Kotlin中迭代单例属性的正确方法是什么?

来自分类Dev

实现组件范围的单例的最佳方法是什么?

来自分类Dev

单例类崩溃

来自分类Dev

在Ruby中,将方法添加到实例的singleton类的用例是什么?

来自分类Dev

iOS8 + Swift:创建真正的单例类

来自分类Dev

如何在Javascript中创建单例类?

来自分类Dev

如何在iOS中创建单例类?

来自分类Dev

如何在C ++中创建简单的单例类?

来自分类Dev

创建通用单例

来自分类Dev

无法创建单例

来自分类Dev

创建单例时,为什么要重复单例中的作用域?

Related 相关文章

  1. 1

    ruby创建单例类的场景是什么

  2. 2

    创建线程安全单例的正确方法是什么?

  3. 3

    静态类和单例类之间的主要区别是什么

  4. 4

    为什么不能在Ruby的单例类定义中访问类实例变量?

  5. 5

    PHP中的单例是什么?

  6. 6

    C#-尝试创建单例类

  7. 7

    为mongo创建单例类

  8. 8

    为mongo创建单例类

  9. 9

    在简单注入器中将两个接口注册为单例的类的行为是什么

  10. 10

    在Managed C ++中,在类中定义静态单例实例的正确方法是什么?

  11. 11

    在简单注入器中将两个接口注册为单例的类的行为是什么

  12. 12

    Ruby元类:为什么在定义单例方法时要使用三个?

  13. 13

    Ruby:单例类真的拥有匿名类吗?

  14. 14

    为什么在Eager初始化中,在加载类时创建的单例类的实例可能会带来缺点?

  15. 15

    为什么在Eager初始化中,在加载类时创建的单例类的实例可能会带来缺点?

  16. 16

    Ruby模块可以描述为单例类吗?

  17. 17

    Ruby on Rails:引用路由中的单例类动作

  18. 18

    是什么使单例线程不安全?

  19. 19

    在Kotlin中迭代单例属性的正确方法是什么?

  20. 20

    实现组件范围的单例的最佳方法是什么?

  21. 21

    单例类崩溃

  22. 22

    在Ruby中,将方法添加到实例的singleton类的用例是什么?

  23. 23

    iOS8 + Swift:创建真正的单例类

  24. 24

    如何在Javascript中创建单例类?

  25. 25

    如何在iOS中创建单例类?

  26. 26

    如何在C ++中创建简单的单例类?

  27. 27

    创建通用单例

  28. 28

    无法创建单例

  29. 29

    创建单例时,为什么要重复单例中的作用域?

热门标签

归档