我有一个特定的课程C
,我想重载一些数学运算符。
我已经超载了+
, i
, *
, ,/
所以我可以做类似的事情
a = C.new
b = C.new
a + b
a + 2
a + 2.0
为了处理最后三种情况,我正在系统地测试操作数的类型: is it C
,Fixnum
or Float
,其他可能性被拒绝。我的第一个问题是:这样做是否正确?
接下来我也希望能够做到
2.0 + A
我该怎么做?我应该提供某种转换吗?这两个问题可以用同样的方法解决吗?
我有一个特定的课程C
,我想重载一些数学运算符。
我已经超载了+
, i
, *
, ,/
所以我可以做类似的事情
a = C.new
b = C.new
a + b
a + 2
a + 2.0
为了处理最后三种情况,我正在系统地测试操作数的类型: is it C
,Fixnum
or Float
,其他可能性被拒绝。我的第一个问题是:这样做是否正确?
接下来我也希望能够做到
2.0 + A
我该怎么做?我应该提供某种转换吗?这两个问题可以用同样的方法解决吗?
我相信“红宝石运算符重载问题”的答案通过使用is_a?
and解决了您的观点coerce
。
关于你的第一点。Ruby 中的常规方法是尽可能使用respond_to?
,而不是检查类型。如果由于某种原因您特别需要检查类型,那么使用is_a?
是正确的方法。