これの違いがよくわかりません。
def String.hello
puts "hello there"
end
と
x = Person.new
def x.hello
puts "hello there"
end
私の理解では、2 番目のコード ブロックはクラス Person のオブジェクトを作成します。def x.helloを実行すると、 xオブジェクトにメッセージを送信するときに最初にメソッドがチェックされる匿名クラス (シングルトン クラス) が作成されます。
これはdef String.helloの場合と同じですか? String はただのクラス Class のインスタンスですよね?def String.helloを実行すると、メソッドが String のクラス メソッドの 1 つとして追加されることを読みました。これは、インスタンス メソッドを取得するオブジェクトとそのクラスの間に作成される匿名クラスとは異なります。
上記のコードの両方のブロックで何が起こるでしょうか?