ruby - Ruby Matrix 类的复制/继承(核心/标准库)

标签 ruby inheritance matrix singleton

我尝试在 Ruby 中扩展现有的 Singleton 类,例如 Matrix 类。

我的第一个快速而肮脏的解决方案是猴子补丁(重新打开类并扩展功能)。

但我认为,猴子修补一般来说并不好,尤其是当有人试图覆盖核心类的基本方法时,如 String、Integer、...

下一步是找出如何获得具有新名称(如 MatrixExt)的 Matrix 类的真实硬拷贝,它的行为就像一个独立的单例。

MatrixExt = Matrix

没有完成工作,因为它导致:

MatrixExt.scalar(2,0)
=> Matrix[[0, 0], [0, 0]]

所以我只能为同一个单例获得多个名字。不是,我想要的。

clonedup 方法的结果相同。

类继承也不起作用:

class MatrixExt < Matrix
  # patches ...
end

MatrixExt.scalar(2,0)
=> Matrix[[0, 0], [0, 0]]

这是最令人困惑的部分,因为在自定义类中,可以获得继承类。 (那么,为什么核心/标准库类的工作方式不同?)

我目前的解决方案是有一个带有扩展的模块,然后在初始化后显式地使用 .extend,例如:

m = Matrix.scalar(2,0).extend(MatrixExtModule)

现在没问题,但我的问题是:

是否有其他解决方案?如果有,该怎么做?

(不,复制 matrix.rb 当然不是一个好方法。;o)

我做错了什么或我的想法有误?

在此先感谢您提供任何解决方案和/或思考问题!

最佳答案

这是一个错误。

我创建了一个 issue on redmine.ruby-lang.org ,这是修复这些问题的推荐做法。

我修复了库,但恐怕要到 Ruby 1.9.4 才能使用。

关于ruby - Ruby Matrix 类的复制/继承(核心/标准库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6064902/

相关文章:

ruby - Amazon OpsWorks 自定义说明书 RVM

Ruby:将 Date 和 Time 对象组合成 DateTime

inheritance - COM 接口(interface)版本控制和继承

eclipse - Eclipse 支持的用于删除父类(super class)依赖性的重构可能是什么?

python - 如何通过行索引和列索引将元素插入到 Numpy 矩阵中

mysql - 访问静态页面时不要连接mysql服务器

Ruby Regex 非贪婪匹配 : looking for the closest occurrence of a phrase left to a searched word

c# - 从在其构造函数中接受参数的基类继承的单例类?

javascript - Three.js 将对象添加到组中但保持全局位置/旋转/比例不变

arrays - 将矩阵的坐标转换为相应数组的坐标