问题描述
|
我试图在Ruby中扩展现有的Singleton类,例如Matrix类。
我的第一个快捷,肮脏的解决方案是猴子补丁(重新打开类并扩展了功能)。
但是我认为,猴子修补程序通常不好,特别是如果有人试图覆盖核心类的基本方法,例如String,Integer等。
下一步是找出如何获得具有新名称(如MatrixExt)的Matrix类的真实硬拷贝,该名称表现为独立的单例。
MatrixExt = Matrix
没有工作,因为它导致:
MatrixExt.scalar(2,0)
=> Matrix[[0,0],[0,0]]
所以我只为同一个单身人士获得多个名字。不,我想要的。
clone
和dup
方法的结果相同。
同样,类继承将不起作用:
class MatrixExt < Matrix
# patches ...
end
MatrixExt.scalar(2,0]]
这是最令人困惑的部分,因为在自定义类中,可以获取继承的类。 (因此,为什么core / std lib类工作不同?)
我当前的解决方案是拥有一个带有扩展名的模块,然后在初始化后显式使用.extend
,例如:
m = Matrix.scalar(2,0).extend(MatrixExtModule)
现在还可以,但是我的问题是:
是否有其他解决方案?(是时)如何执行?
(不,当然,复制matrix.rb不是一个好方法。
我做错了或我以错误的方式思考的地方?
在此先感谢您提供任何解决方案和/或思想上的帮助!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)