2
class A
  def initialize(string, number)
    @string = string
    @number = number
  end

  def to_s
    "In to_s:\n   #{@string}, #{@number}\n"
  end
  def to_a
    "In to_a:\n   #{@string}, #{@number}\n"
  end
end
puts a = A.new("hello world", 5)

出力は

 In to_s:
   hello world, 5

メソッドはどのようにto_s自動的に呼び出されますか?

などの別のメソッドが自動的に呼び出されないのはなぜto_aですか?

メソッドにputs を書いていないのでto_s、出力が表示されるのはなぜですか。

4

3 に答える 3

7

に送信しています。putsこれは、を使用してオブジェクトを文字列としてレンダリングしようとしますto_s

最後の行を :puts A.new("hello world", 5).to_aに変更すると、代わりto_sに返された配列が呼び出され、A はto_s呼び出されません。

于 2012-08-20T15:26:23.333 に答える
1

puts通常to_s、オブジェクトに適用し た結果を出力します 詳細 はこちら

于 2013-11-03T08:40:38.963 に答える
0

@numbers1311407の回答に加えて

コードを試すたびにirb

to_s暗黙的に呼び出します。

@ numbers1311407の回答が説明しているように。

to_s暗黙的に呼び出す

于 2012-08-20T15:47:03.650 に答える