0

我希望我的自定义类的实例具有与其超类相同的方法和行为,除非在其上调用返回某些内容的特定方法(例如next,它返回Numeric序列中的下一个)。在这种情况下,它应该像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.

4

1 回答 1

1

inspect您在该类上定义方法。例如,如果您修改String#inspect为:

class String
  def inspect; self * 2 end
end

然后你得到:

"Hello" # => "HelloHello"

我想你想要这个:

class MyNumber < Numeric
  def inspect; "Hey #{self}" end
end

请注意,插值"#{}"使用to_sand not inspect,因此这不会导致无限递归。

于 2013-11-06T03:16:29.673 回答