Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 基于单例类创建新的非单例类_Ruby_Singleton - Fatal编程技术网

Ruby 基于单例类创建新的非单例类

Ruby 基于单例类创建新的非单例类,ruby,singleton,Ruby,Singleton,在Ruby中,是否可以基于单例类定义一个新的非单例类 我试过这样的方法(剪): 当然,对你们这些大师来说,这显然不会像我预期的那样起作用 基本上我想要的是重用Singleton类的功能,而不以任何方式影响它的行为。可能吗 经过进一步调查,这似乎根本不可能(如果我错了,请纠正我)。像下面这样的黑客会不会太混乱 singleton = File.read('some_singleton.rb') non_singleton = eval(singleton.gsub('include Singlet

在Ruby中,是否可以基于单例类定义一个新的非单例类

我试过这样的方法(剪):

当然,对你们这些大师来说,这显然不会像我预期的那样起作用

基本上我想要的是重用Singleton类的功能,而不以任何方式影响它的行为。可能吗

经过进一步调查,这似乎根本不可能(如果我错了,请纠正我)。像下面这样的黑客会不会太混乱

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