3

RubyのNArray(数値配列)のラッパークラスを作成しています。NArray のインスタンスと同じ方法で、クラスがすべての標準数学演算子 (+、+=、-、-=、*、*= など) に応答するようにしたいと考えています。Arrays やその他のEnumerableオブジェクトのラッパーを作成し、ラッパーに含め、ラップされたオブジェクトにリダイレクトするだけのメソッドをEnumerable定義する方法を知っています。NArray に似たものが欲しいです。ラップされた NArray を対象とする一連の数学演算子全体を定義する、定義できる単一のモジュール/メソッドはありますか? または、それらをすべて手動で定義する必要がありますか?eachEnumerable

4

1 に答える 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 に答える