gpt4 book ai didi

ruby - 是否有等同于 `Enumerable` 的定义 Ruby 中的数学运算?

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

我正在为 Ruby 的 NArray(数字数组)创建一个包装器类。我希望我的类(class)以与 NArray 实例相同的方式响应所有标准数学运算符(+、+=、-、-=、*、*= 等)。我知道如何为 Array 和其他 Enumerable 对象制作包装器,在包装器中包含 Enumerable,并定义一个 each 方法,它只是重定向到包装的 Enumerable 对象。我想要与 NArray 类似的东西。是否有一个模块可以包含/我可以定义方法来定义整个数学运算符来定位包装的 NArray?还是我必须手动定义它们?

最佳答案

你可以使用Forwardable:

require 'forwardable'
class MyWrapper

extend Forwardable
def_delegators :@narray, :+, :*, # etc...

def initialize(narray)
@narray = narray
end
end

我不确定这是否适用于 += 等方法(我不知道它们是如何实现的,但我相信它们是解析器的一个特性,而不是实际上可以引用的方法)。

在 MyWrapper 的实例上调用 += 会将引用设置为该操作的结果,因此您需要找出一种方法来返回相同的实例。这就提出了一个问题 - 是您想做什么(返回一个包装的 NArray 作为数学运算的结果),还是您希望您的 NArray 处理返回?

关于ruby - 是否有等同于 `Enumerable` 的定义 Ruby 中的数学运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13214846/

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