私は、浮動小数点のように振る舞いたいAngleクラスを持っています。私は浮動小数点を含むクラスを作成し、それにすべての未知のメソッドを代入します:Rubyで自動的にクラスインスタンスをFloatにキャストするにはどうすればよいですか?
class Angle
include Math
def initialize(angle=0.0)
@angle = Float(angle)
# Normalize the angle
@angle = @angle.modulo(PI*2)
end
def to_f
@angle.to_f
end
# Other functionality...
def method_missing(message, *args, &block)
if block_given?
@angle.public_send(message, *args, &block)
else
@angle.public_send(message, *args)
end
end
end
これは問題なく動作します。しかし、私がtrig操作でそれを使用しようとすると、例えば。 Math.cosは、私が取得:
> a = Angle.new(0.0)
=> #<Angle:0x00000000cdb220 @angle=0.0>
@angle=0.0
> Math.cos(a)
TypeError: can't convert Angle into Float
私はfloatに変換するにはフロート(A)を使用することができます知っているが、私は、このクラスは、floatのように動作しますので、それは不便です。このような場合、Angleを自動的に浮動小数点に変換する方法はありますか?
角度は '実装することができませんでしたto_float'? –
私は、to_aryとto_procに類似したto_float強制変換メソッドがあることを期待しましたが、それはルビにはありません。 – phiggy
興味深い回避策。おそらく、FloatメソッドがNumericメソッドの代わりに呼び出されるようにする必要があります。 –