Есть ли веские причины для того, чтобы «private» работал так же, как в Ruby?

Мне понадобилось время, чтобы понять, какчастный методы работают в Ruby, и это действительно кажется мне очень неловким. Кто-нибудь знает, есть ли веские основания для того, чтобы частные методы обрабатывались такими, какие они есть? Это просто исторические причины? Или причины реализации? Или есть хорошие веские логические причины (т.е. семантические)?

Например:

class Person
  private
  attr_reader :weight
end

class Spy < Person
 private
  attr_accessor :code
 public
  def test
    code          #(1) OK: you can call a private method in self
    Spy.new.code  #(2) ERROR: cannot call a private method on any other object
    self.code     #(3) ERROR!!! cannot call a private method explicitly on 'self'
    code="xyz"    #(4) Ok, it runs, but it actually creates a local variable!!!
    self.code="z" #(5) OK! This is the only case where explicit 'self' is ok
    weight        #(6) OK! You can call a private method defined in a base class
  end
end
Рубин'Поведение s на строках (1), (2) и (5) представляется разумным.То, что (6) в порядке, немного странно, особенно в Java и C ++. Есть веская причина для этого?Я действительно не понимаю, почему (3) не удается! Кто-нибудь объяснение?Проблема в строке (4) выглядит как двусмысленность в грамматике, которая не имеет ничего общего с 'частный'.

Есть идеи? Я

Ответы на вопрос(1)

Ваш ответ на вопрос