1

現在、プライベートにすることを検討しているメソッドがコード全体に分散されているクラスを作成しています。行を追加してprivateその下にすべてをコピーして貼り付けるのではなく、クラスの先頭でprivate :foo, :bar.

ただし、パラメーターを持つメソッドをプライベート インラインとして宣言しようとすると、エラー メッセージが表示されます。たとえば、 methodfoo(bar, baz)があり、それを private で宣言しようとすると、代わりにandをprivate :foo(bar, baz)期待して、2 つの括弧にエラー メッセージが表示されます。kEND=

で宣言しようとすると、コードにprivate :fooそのようなメソッドがないと言われfooます。

これらのエラーが発生しないようにするにはどうすればよいですか?

4

1 に答える 1

9

TL; DR は、メソッドが定義されたprivate :fooに表示される必要があります。

privateの引数は、呼び出し (例: ):fooではなく、シンボル (例: ) でなければなりません1foo(bar, baz)

Ruby クラスの宣言は単なるコードです。ステートメントは、記述された順序で実行されます。呼び出しにより、メソッドprivate :fooのクラスがチェックされます。fooまだ定義されていない場合は、エラーです。


最新の Ruby 用に更新

defキーワードは、定義されているメソッドのシンボルを返すようになりました。これにより、次のことが可能になります。

private def foo; ... ; end

1 メソッド シンボルを返すクラス メソッド呼び出しでない限り、エッジ ケース。

于 2011-12-05T23:39:28.323 に答える