Ruby 保护与私有的区别

Ruby 保护与私有的区别,ruby,protected,access-modifiers,private-methods,Ruby,Protected,Access Modifiers,Private Methods,我想知道Ruby中private和protected的区别,有很多源代码,但它们通常只告诉我private方法不能被继承,而是以许多不同的方式 class Person private def hello puts "hello" end end class Student < Person def initialize hello end end leo = Student.new 班级人员 私有的 你好 “你好” 结束 结束 班级学生

我想知道Ruby中private和protected的区别,有很多源代码,但它们通常只告诉我private方法不能被继承,而是以许多不同的方式

class Person  
  private

  def hello
    puts "hello"
  end
end

class Student < Person

  def initialize
    hello
  end
end

leo = Student.new
班级人员
私有的
你好
“你好”
结束
结束
班级学生<人
def初始化
你好
结束
结束
利奥=学生

但这个非常简单的例子证明了这种说法是错误的,它继承并使用了私有方法。另外,如果我在这里将“private”改为“protected”,它仍然会在创建leo变量时给我“hello”。那么公共和受保护的情况如何呢?

请看这篇博文

来源:

Public每个人都可以调用方法-不强制执行访问控制。默认情况下,类的实例方法(它们不仅属于一个对象;相反,类的每个实例都可以调用它们)是公共的;任何人都可以打电话给他们。初始化方法始终是私有的

受保护的方法只能由定义类及其子类的对象调用。家庭内部保持访问权限。然而,受保护的应用是有限的

Private方法不能使用显式接收器调用-接收器始终是self。这意味着只能在当前对象的上下文中调用私有方法;不能调用其他对象的私有方法


另外,我建议你阅读这本书,这是我在网上搜索到的第一件事:

与其他语言的最大区别似乎是,私有方法可以由子类调用,但只能在没有显式接收器的情况下调用(即使它是self)。这里的Receiver是指Smalltalk OO的一种方式,即调用对象上的方法可以被视为向对象发送消息。
当您在示例中只写“hello”时,它没有显式接收器,隐式接收器是self,因此它可以工作,尽管它与其他一些OO语言的语义相矛盾。

@Leo-@broisasse我已经添加了这本书的链接,如果您不介意的话:)@afurm-我为什么要这样做,这不是我的书。:)Ruby文档:。很好的笑话-我为什么要这样做,这不是我的书。:-)爆笑。。