gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 08:01:47 24 4
gpt4 key购买 nike

我尝试在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com