我试图得到一个很好的Ruby编码风格。为了防止意外调用同名的局部变量,我总是在适当的地方使用self.
。但现在我绊了这一点:调用一个私有方法xxx使用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
。为什么?
谢谢你的解释。我会牢记这一点,但我想要真正理解它,我必须深入挖掘Ruby的内部,对吧? – 2012-08-12 16:28:37
@JoshuaMuheim不一定,这只是私人方法的工作方式,通过禁止明确的接收者是不能从任何地方调用隐含的接收者是不一样的'自我',它只是有一些不幸的副作用,阻止你从使用与隐式接收器相同的显式接收器来调用私有方法。 – 2012-08-12 16:31:00
好的,这很有趣。非常感谢您的解释。 :) – 2012-08-12 16:52:56