RubyのNArray(数値配列)のラッパークラスを作成しています。NArray のインスタンスと同じ方法で、クラスがすべての標準数学演算子 (+、+=、-、-=、*、*= など) に応答するようにしたいと考えています。Array
s やその他のEnumerable
オブジェクトのラッパーを作成し、ラッパーに含め、ラップされたオブジェクトにリダイレクトするだけのメソッドをEnumerable
定義する方法を知っています。NArray に似たものが欲しいです。ラップされた NArray を対象とする一連の数学演算子全体を定義する、定義できる単一のモジュール/メソッドはありますか? または、それらをすべて手動で定義する必要がありますか?each
Enumerable
質問する
108 次
1 に答える
2
使用できますForwardable
:
require 'forwardable'
class MyWrapper
extend Forwardable
def_delegators :@narray, :+, :*, # etc...
def initialize(narray)
@narray = narray
end
end
これが+=
et al メソッドで機能するかどうかはわかりません(それらがどのように実装されているか正確にはわかりませんが、それらはパーサーの機能であり、実際に参照できるメソッドではないと思います)。
MyWrapper+=
のインスタンスを呼び出すと、その操作の結果への参照が設定されるため、同じインスタンスを返す方法を見つける必要があります。それはあなたがしたいことですか(数学演算の結果としてラップされたNArrayを返します)、それともあなたのNArrayが戻り値を処理することを期待していますか?
于 2012-11-04T01:04:55.840 に答える