Próbuję uzyskać dobry styl kodowania Ruby. Aby zapobiec przypadkowemu wywołaniu zmiennej lokalnej o tej samej nazwie, zawsze używam w razie potrzeby numeru self.
. Ale teraz ja potknąłem się następująco:Wywołanie prywatnej metody xxx za pomocą self.xxx() z innej prywatnej metody powodującej błąd "prywatna metoda" xxx "o nazwie"
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
powyższych wyników w kodzie błędu
Metoda prywatna
sanitize_name
nazywa
ale przy usuwaniu self.
i tylko przy użyciu sanitize_name
, to działa. Dlaczego tak jest?
Dziękuję za wyjaśnienia. Będę o tym pamiętać, ale myślę, że naprawdę to rozumiem, musiałbym głęboko zagłębić się w elementy wewnętrzne Ruby, prawda? –
@JoshuaMuheim Niekoniecznie, to tak, jak działają metody prywatne, przez zabronienie jawnego odbiornika nie można wywołać z dowolnego miejsca, w którym niejawny odbiornik nie jest tym samym "ja", ma tylko nieco niefortunny efekt uboczny, uniemożliwiający użytkownikowi wywołanie metody prywatnej z tym samym jawnym odbiornikiem, co niejawny odbiornik. –
Dobra, to interesujące. Wielkie dzięki za wyjaśnienie. :) –