我希望我的自定义类的实例具有与其超类相同的方法和行为,除非在其上调用返回某些内容的特定方法(如next
,它返回下一个Numeric
in序列)。在这种情况下,它应该像String
一样行动。
class MyNumber < Numeric
...
end
val = MyNumber.new(1)
# acts like a regular Numeric
val.next
#=> 2
val
#=> "Hello 2!"
puts "Hey #{val}"
#=> "Hey Hello 2!"
在上面的情况中,我想我会重新定义to_s
。
答案 0 :(得分:1)
您在该类上定义inspect
方法。例如,如果您将String#inspect
修改为:
class String
def inspect; self * 2 end
end
然后你得到:
"Hello" # => "HelloHello"
我想你想要这个:
class MyNumber < Numeric
def inspect; "Hey #{self}" end
end
请注意,插值"#{}"
使用to_s
而非inspect
,因此不会导致无限递归。