【发布时间】:2014-11-17 03:28:30
【问题描述】:
为什么这段代码有效?我知道private 用作方法的修饰符,使用显式接收器 (self) 将不起作用。
我知道会有SystemStackError,但我想了解可见性的概念。
class Methods
private
def private_method
puts "I'm in private method"
self.private_method
end
end
class ChildMethods < Methods
def private_method
super
end
end
ChildMethods.new.private_method
【问题讨论】:
-
Methods#private_method是私有的这一事实有点牵强附会。ChildMethods#private_method导致 Ruby 将private_method发送到父类中的self。哪个private_method?它首先查看self的班级中是否有一个。self是什么?当然,它是ChildMethods的一个实例(如果不确定,请在Methods#private_method中添加puts语句),因此Ruby 找到并执行ChildMethods#private_method,将其发送回父级。顺便说一句,self.private_method中的self.没有添加任何内容,因为如果不是明确的,则假定接收者是self。
标签: ruby recursion methods private