1

次のコード:

class Avalon 
  def h
    puts "petrezselyem"
  end
end
Avalon.new.h

プリントアウトし"petrezselyem"ます。ただし、次のように入力すると:

puts Avalon.new.h.size

それは与えます

undefined method `size' for nil:NilClass (NoMethodError).

この振る舞いを説明していただけますか?

4

2 に答える 2

6

メソッドhは戻りません。"petrezselyem"出力し"petrezselyem"ます。だからAvalon.new.h == nil

Java ではコンパイル エラーが発生しますが、Ruby のような動的言語では返される型がわかりません。

于 2012-05-25T13:02:04.480 に答える
5

Kernel#putsのシグネチャを見てください:

puts(obj, ...) → nil

これはputs常に戻ることを意味し、メソッドnilの最後のステートメントであるhため、これはそのメソッドの戻り値にもなります。

于 2012-05-25T13:24:29.833 に答える