我有一個角度類,我想表現得像一個浮動,具有額外的行爲。我創建了類包含一個浮動和代理所有未知的方法:如何自動將類實例轉換爲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
我知道我可以使用浮動(一)轉換爲浮動,但因爲我想這個類的行爲像一個漂浮它的不方便。有沒有辦法在這些情況下自動轉換角度浮動?
無法角度實現' to_float'? –
我期望有一個類似to_ary和to_proc的to_float強制方法,但它不會出現ruby。 – phiggy
有趣的解決方法。我可能需要確保調用Float方法而不是Numeric方法。 –