Ich versuche, einen guten Ruby-Codierungsstil zu bekommen. Um zu verhindern, dass versehentlich eine lokale Variable mit dem gleichen Namen aufgerufen wird, verwende ich immer self.
. Aber jetzt stolperte ich über diese:Aufruf einer privaten Methode xxx mit self.xxx() aus einer anderen privaten Methode resultierend in Fehler "private Methode` xxx 'genannt "
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
Die obigen Code führt zu einem Fehler
private Methode
sanitize_name
genannt
aber wenn self.
entfernen und nur mit sanitize_name
, es funktioniert. Warum ist das?
Vielen Dank für die Erklärung. Ich werde das im Hinterkopf behalten, aber ich denke, um es wirklich zu verstehen, müsste ich tief in Rubys Interna eindringen, oder? –
@JoshuaMuheim Nicht unbedingt, es ist nur die Art, wie private Methoden funktionieren, indem man einen expliziten Empfänger verbietet, kann nicht von überall her aufgerufen werden, der implizite Empfänger ist nicht das selbe "Selbst", es hat nur den etwas unglücklichen Nebeneffekt, dich davon abzuhalten eine private Methode mit demselben expliziten Empfänger aufrufen wie der implizite Empfänger. –
Okay, das ist interessant. Vielen Dank für die Erklärung. :) –