ruby – 如何检查对象是否具有单例类(特征类),而不创建一个
有没有一种检查对象是否具有单例类而不创建单个类的方法?
除了Check if an object has a singleton class之外,每个物件都不具有单身类(参见https://repl.it/DuVJ/2证明). 以下方法进入我的脑海,但不行: > obj.singleton_class 如果没有,则自动创建一个新的单例类(参见 has_singleton_class = ObjectSpace.each_object(Class).any? do |klass| klass < self.class && klass.singleton_class? && self.is_a?(klass) end 这很慢,可能无法在jRuby下工作,因为ObjectSpace可能不会 解决方法
您可以使用祖先方法.因为你想检查一个类(而不是一个对象)是一个单例,你可以获取类中混合的所有模块,并验证其中的任何一个是单例类.
class Klass include Singleton end Klass.ancestors.include? Singleton # true 在红宝石中,要创建一个单例,您应该包含一个Singleton模块.所以如果你检查该模块,这意味着该类是一个单例. Ruby的基类继承的模块类意味着你有权使用祖先的方法. 参考文献: > https://ruby-doc.org/core-2.1.0/Module.html#method-i-ancestors (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |