ごとけんです

数値配列なんですけど、coercing で悩みがあります。

def coerce(other)
  if other.type == self.type
    return [self, other]
  elsif other.is_a? Numeric
    return [NumArray.new(self.size, other), self]
  else
    super
  end
end

みたいな感じにしてるんですけど、これだと必ずその場で捨てられ
るオブジェクト NumArray.new(self.size, other) が作られます。
つまり、ary + 1 と 1 + ary でかなりコストに差が出るわけです。
しかもGCを刺激してよろしくない。いまのところ、演算側を

protected :add, :add!

def +(other)
  if other.is_a? NumArray
    add(other)
  else
    x,y = coerce(other)
    x.add!(y)
  end
end

という実装にしてるんですが、なんだかいまいちよくないような気
もしてます(coerceの結果が + でなく別のメソッドを要求する辺り)。
どう思われます??

-- gotoken