什么时候在Ruby中使用Singleton类是明智的?
发布时间:2020-12-16 22:14:33 所属栏目:百科 来源:网络整理
导读:我正在阅读 Ruby中的Singletons.我从来没有真的需要使用它们,但我很好奇,决定查找它们,看看我以前是否应该使用它们,或者如果我知道他们是什么,我可以在将来使用它们用于. 我唯一可以想到使用的是: ?当我需要一个特殊的对象.示例:“smart”哈希对象,其行为
我正在阅读
Ruby中的Singletons.我从来没有真的需要使用它们,但我很好奇,决定查找它们,看看我以前是否应该使用它们,或者如果我知道他们是什么,我可以在将来使用它们用于.
我唯一可以想到使用的是: >?当我需要一个特殊的对象.示例:“smart”哈希对象,其行为就像一个普通的Ruby哈希与一些额外的怪癖. 但是,我并不确定我是否需要上述任一项. 解决方法
请注意,Singleton模块中的类混合在功能上等同于具有’class’方法的类或模块,以及有保证的初始化调用或内联初始化.比较Singleton的这种用法:
require 'singleton' class Bar include Singleton attr_reader :jam def initialize @jam = 42 end def double @jam *= 2 end end b1 = Bar.instance b1.double b2 = Bar.instance b2.double p b1.jam #=> 168 与这个无魔术模块: module Foo @jam = 42 def self.double @jam *= 2 end def self.jam @jam end end Foo.double Foo.double p Foo.jam #=> 168 在这两种情况下,您都有一个保持状态的全局对象. (因为在全局范围中创建的每个常量,包括类和模块,都是一个全局对象.) 唯一的功能不同之处在于,对于Singleton,您会延迟对象的初始化,直到您第一次要求它为止. 所以,如果您在类或模块上有“类”方法,并且您使用这些方法来更改该对象的状态(例如,一个跟踪所有子类的类的跟踪),您基本上使用单例. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容