Ruby 基于单例类创建新的非单例类
在Ruby中,是否可以基于单例类定义一个新的非单例类 我试过这样的方法(剪): 当然,对你们这些大师来说,这显然不会像我预期的那样起作用 基本上我想要的是重用Singleton类的功能,而不以任何方式影响它的行为。可能吗 经过进一步调查,这似乎根本不可能(如果我错了,请纠正我)。像下面这样的黑客会不会太混乱Ruby 基于单例类创建新的非单例类,ruby,singleton,Ruby,Singleton,在Ruby中,是否可以基于单例类定义一个新的非单例类 我试过这样的方法(剪): 当然,对你们这些大师来说,这显然不会像我预期的那样起作用 基本上我想要的是重用Singleton类的功能,而不以任何方式影响它的行为。可能吗 经过进一步调查,这似乎根本不可能(如果我错了,请纠正我)。像下面这样的黑客会不会太混乱 singleton = File.read('some_singleton.rb') non_singleton = eval(singleton.gsub('include Singlet
singleton = File.read('some_singleton.rb')
non_singleton = eval(singleton.gsub('include Singleton', ''))
# Or perhaps:
non_singleton = eval(singleton.gsub('module SomeModule', 'module MyOwnModule'))
嗯。我这里没有真正的ruby,只有IronRuby,但当我尝试这样做时,会发生以下情况:
# define a new object
>>> s = "hello"
=> "hello"
# add a method to it's singleton class
>>> class << s
... def say; puts self; end
... end
=> nil
# get it's singleton class
>>> SingletonBaseClass = class << s; self; end
=> #<Class:#<String:0x000005c>>
# try build a new one inheriting from the singleton class
>>> class NonSingletonClass < SingletonBaseClass
... end
:0: can't make subclass of virtual class (TypeError)
#定义一个新对象
>>>s=“你好”
=>“你好”
#向其singleton类添加一个方法
>>>零级
#明白了,这是单身班
>>>SingletonBaseClass=class#
#尝试从singleton类继承构建一个新类
>>>类非SingletonClass
IronRuby与普通ruby语言本身相当兼容,我敢打赌在真实ruby中也会出现类似的错误消息。简言之,你做不到
这就引出了一个问题:你想做什么?如果某个特定对象的单例类变得足够复杂,以至于您想要重用它,那么您不应该将该代码放在常规类或模块中吗
例如,您可以这样做:
# define our reusable code
module SharedMethods
def a;end
def b;end
# and so on
end
# mix it into the singleton of some object
s = "hello"
class << s; include SharedMethods; end
#定义我们的可重用代码
模块共享方法
DEFA;结束
def b;结束
#等等
结束
#将其混合到某个对象的单例中
s=“你好”
同学们,谢谢,我也试过了,它给了我同样的错误。我想在Rails上有不同的拐点规则集,为此我需要重新使用ActiveSupport::拐点::拐点。我想他指的是“包括singleton”中的singleton,而不是eigenclass.Darn。我一直认为将元/特征类称为“单例类”是个坏主意
# define our reusable code
module SharedMethods
def a;end
def b;end
# and so on
end
# mix it into the singleton of some object
s = "hello"
class << s; include SharedMethods; end