3

Avdi Grimm の本「Objects in Rails」を読んでいますが、彼はメソッド public_method を使用していますが、その理由がわかりません。コード例は次のとおりです。

class Blog
  # ...
  attr_writer :post_source
  # ...
  private
  def post_source
    @post_source ||= Post.public_method(:new)
  end
end

Post.new ではなく Post.public_method(:new) を呼び出すのはなぜですか? これらのメソッドは何か違うことをしますか、それともまったく同じですか? 助けてくれてありがとう。

4

2 に答える 2

3
Post.new

と同等ではありません

Post.public_method(:new)

前者は method の呼び出しでnew、デフォルトでは新しいPostオブジェクトを作成します。ただし、後者はすぐには呼び出されません。new後で呼び出されるように準備するだけです。私はその特定の本を読んだことはありませんが、関連するソース コードを調べてみると、次の行が表示されます。

@post_source.call # maybe some params are passed here

これがPost#new最終的に呼び出される場所です。

ドキュメント: Object#public_methodObject#method

于 2013-02-22T11:05:19.497 に答える
2

Post.public_method(:new)Post.newは別のものです。後者は のインスタンスを作成しますPost。前者は のインスタンスを作成しますMethod。これは、そのようなメソッドを適用した結果ではなく、メソッド自体の抽象化です。後で実行することで、その結果を取り出すことができますcall

Post.public_method(:new)Post.method(:new)という名前のプライベートまたは保護されたメソッドがない限り、に置き換えることができますnew。そのようなメソッドがあれば参照しないようにしているだけです。

于 2013-02-22T11:04:54.730 に答える