というプライベートメソッド` xxx 'というエラーが発生しました。私は良いRubyコーディングスタイルを取得しようとしています。誤って同じ名前のローカル変数を呼び出さないように、私はいつもself.
を適切に使用しています。しかし、今、私はこのつまずい:他のプライベートメソッド内からself.xxx()を使用してプライベートメソッドxxxを呼び出すと、 "
class MyClass < ActiveRecord::Base
before_validation :sanitize_user_data
private
def sanitize_user_data
self.sanitize_name # with ".self" it's a problem, without it's not!
end
def sanitize_name
unless self.name.nil?
self.name.gsub!(/\s+/, ' ')
self.name.strip!
end
end
end
上記のコードの結果をエラー
が、
self.
を削除し、ちょうど
sanitize_name
を使用した場合、それが動作するというプライベートメソッド
sanitize_name
に。それはなぜですか?プライベートメソッドは、明示的な受信機と呼ばれ、そして
self.sanitize_name
が明示的に(も
self
である)ではなく、暗黙の受信機に頼るよりも、
sanitize_name
を受けるべきオブジェクト(
self
)を指定されたと言ってすることはできませんので
ありがとうございます。私はこれを念頭に置いておくつもりですが、実際に理解していると思います。私はRubyの内部を深く掘り下げなければならないでしょうか? –
@JoshuaMuheim明示的な受信者を禁止することによって、プライベートメソッドが動作する方法であるとは限りません。暗黙的な受信者は、同じ「自己」ではありません。どこからでも呼び出すことはできません。暗黙受信者と同じ明示的受信者を持つプライベートメソッドを呼び出します。 –
さて、それは面白いです。説明してくれてありがとう。 :) –