나는 추가 동작으로 float처럼 동작하려는 Angle 클래스를가집니다. float를 포함하는 클래스를 작성하고 알 수없는 모든 메소드를 프록시합니다.클래스 인스턴스를 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 연산과 함께 사용하려고 할 때
> a = Angle.new(0.0)
=> #<Angle:0x00000000cdb220 @angle=0.0>
@angle=0.0
> Math.cos(a)
TypeError: can't convert Angle into Float
가 나는의 (a) float로 변환하는 플로트를 사용할 수 알지만,이 클래스는 플로트처럼 행동 할 이후는 불편 :와 Math.cos, 내가 얻을. 이러한 경우 각도를 자동으로 부동으로 변환하는 방법이 있습니까?
앵글을 구현 할 수 없습니다 : 수학은 내가 정말 관심있는 유일한 모듈이다, 그래서 그것을위한 프록시 할 수 있습니다 : 위의 각도 클래스 정의와 지금
을 to_float'? –
to_ary 및 to_proc과 유사한 to_float 강제 변환 방법이있을 것으로 기대했지만 루비에는없는 것으로 나타났습니다. – phiggy
흥미로운 해결 방법. 아마도 Float 메소드가 Numeric 메소드 대신 호출되도록해야 할 것입니다. –