我有两个关于ruby核心oop概念的问题。
我了解方法的显式调用(即使用self)和隐式调用(即在实例方法中没有初始化类对象或self)之间的区别。当我们有明确的接受者,他们能很清楚地接收到一个带有self的方法(因为它指的是当前的对象),而不是隐式的方法(我相信在什么时候使用方法或初始化同名变量的情况下这是非常不确定的),那么为什么我们还有隐式调用方法?这仅仅是一种偏好,还是由于适当使用私有和公共方法而有必要?.
一般来说,oop私有方法是在类本身中绑定的,不能在子类中或外部访问。但是,那些需要私有化但也需要在子类中访问的方法,然后在那里使用受保护的方法。但是在ruby中,私有的和
受保护的方法是在继承的类中访问的,唯一的区别是私有方法只能隐式调用,受保护的方法可以隐式或显式调用。我不明白这里的哲学,仅仅因为ruby中的隐式调用功能,私有方法的一般定义有所不同?

最佳答案

我认为你对保护方法的目的有一点误解。可以从同一类的另一个实例的方法调用受保护的方法。

class Person

  def initialize(name, age)
    @name = name
    @age = age
  end

  def older_than?(other_person)
    age > other_person.age
  end

  protected

  def age
    @age
  end

end

mother = Person.new('Carole', 34)
father = Person.new('George', 37)

如果你试着…
mother.age
=>NoMethodError: protected method `age' called for #<Person:0x0000000327daa0 @name="Carole", @age=34>

因此,您不能在外部调用#age方法。
但你可以…
father.older_than?(mother)
=> true

因此father对象能够调用mother对象#age方法,因为他是同一个类的对象。

关于ruby - 为什么在Ruby中有隐式接收器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44355017/

10-13 01:26