¿Hay buenas razones para que 'privado' funcione como lo hace en Ruby?

Me tomó un tiempo entender cómoprivado Los métodos funcionan en Ruby, y realmente me parece muy incómodo. ¿Alguien sabe si existen buenas razones para que los métodos privados se manejen como son? ¿Son solo razones históricas? ¿O razones de implementación? ¿O hay buenas razones lógicas sólidas (es decir, semánticas)?

Por ejemplo:

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
El comportamiento de Ruby en las líneas (1), (2) y (5) parece razonable.El hecho de que (6) esté bien es un poco extraño, especialmente de Java y C ++. ¿Alguna buena razón para esto?Realmente no entiendo por qué (3) falla! Una explicación, ¿alguien?El problema en la línea (4) parece una ambigüedad en la gramática, que no tiene nada que ver con 'privado'.

¿Algunas ideas?

Respuestas a la pregunta(1)

Su respuesta a la pregunta