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 ではなくinspectを使用するため、これは無限再帰を引き起こさないことに注意してください。

于 2013-11-06T03:16:29.673 に答える