Gibt es gute Gründe, warum "privat" so arbeitet wie in Ruby?

Ich brauchte eine Weile, um zu verstehen, wiePrivatgelände Methoden funktionieren in Ruby, und es scheint mir sehr umständlich zu sein. Weiß jemand, ob es gute Gründe gibt, private Methoden so zu behandeln, wie sie sind? Sind es nur historische Gründe? Oder Umsetzungsgründe? Oder gibt es gute solide logische Gründe (zB Semantik)?

Zum Beispiel:

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
Rubys Verhalten in den Zeilen (1), (2) und (5) erscheint vernünftig.Die Tatsache, dass (6) in Ordnung ist, ist etwas seltsam, insbesondere wenn es sich um Java und C ++ handelt. Hast du einen guten Grund dafür?Ich verstehe wirklich nicht, warum (3) fehlschlägt! Eine Erklärung, jemand?Das Problem in Zeile (4) sieht aus wie eine Mehrdeutigkeit in der Grammatik, die nichts mit "privat" zu tun hat.

Irgendwelche Ideen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage