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?