Existem boas razões para o 'privado' funcionar da maneira como funciona em Ruby?

Levei um tempo para entender comoprivado métodos funcionam em Ruby, e realmente me parece muito estranho. Alguém sabe se há boas razões para os métodos privados serem manipulados como eles são? São apenas razões históricas? Ou razões de implementação? Ou existem boas razões lógicas sólidas (ou seja, semântica)?

Por exemplo:

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
O comportamento de Ruby nas linhas (1), (2) e (5) parece razoável.O fato de (6) estar bem é um pouco estranho, especialmente vindo de Java e C ++. Alguma boa razão para isso?Eu realmente não entendo porque (3) falha! Uma explicação, alguém?O problema on line (4) parece uma ambigüidade na gramática, que nada tem a ver com 'privado'.

Alguma ideia?

questionAnswers(1)

yourAnswerToTheQuestion