我一直有这个令人烦恼的反复出现的主题;比方说,我有一个类,它定义了一个实例方法和一个受保护的类方法。实例方法必须调用类方法。为了做到这一点,我不得不打破可见性规则并使用危险的“发送”功能。像这样的东西:
class Bang
def instance_bang
self.class.send(:class_band)
end
protected
def self.class_bang
puts "bang"
end
end
我觉得这很糟糕,因为类方法应该在类范围内使用,因此应该在其中保持可见和可调用,对吗?是否有另一种方法可以在实例方法中使用类方法,需要依赖“发送”函数,因此不会破坏可见性?
更新:
在 Sergio Tulentsev 的回复之后(感谢更正),我将使用代码片段更新我的担忧,该代码片段总结了我对仍在定义范围内时考虑方法可见性的担忧。
class Bang
def instance_bang
private_bang = 1
self.private_bang(private_bang)
end
private
def private_bang(p)
puts "bang"
p
end
end
调用 Bang.new.instance_bang 将引发异常,除非您在该 private_bang 调用上使用 send(这次我检查了它:))。