以下代码打印NoMethodError
。我不明白原因。虽然我调用的方法是私有的,但我从类中调用它。不能类var访问它的私有变量/函数?我可以用Java做到这一点。
class Tester
private
def func_pri
puts("From a private function")
end
protected
def func_prot
puts("From a protected function")
end
public
def func_pub
puts("From a public function")
end
public
def caller(object)
object.func_pub
object.func_pri # This statement causes error
object.func_prot
end
end
o = Tester.new
o.caller(o)
答案 0 :(得分:5)
您不能在对象上调用私有方法,甚至不能在self
上调用私有方法。移除object.
部分,然后呼叫将继续self
。
如果您确实想要调用私有方法,则可以始终使用object.send(:func_pri)
。
Ruby在这些术语中与Java等语言完全不同。有关详细信息,您可能需要查看http://www.ruby-doc.org/docs/ProgrammingRuby/,“类,对象和变量”一章,“访问控制”部分