Zuerst gibt es ein bisschen Terminologie in der Frage zu bereinigen, bevor Sie es beantworten.
Einer ist, dass Sie nie Variablen "aufrufen". Der Rubin Ausdruck
my_object.variable
ist ein Methodenaufruf. Es gibt keinen variablen Aufruf. Sie rufen Methoden und keine Variablen auf. Auch wenn die Methode variable
heißt. :)
Die zweite ist, wenn Sie die Methode wie folgt
def variable
@variable
end
entweder direkt oder durch
sagen
attr_reader :variable
Dann haben Sie eine Methode variable
und eine @variable
namens Variable mit dem Namen tat definieren.
Jetzt, um die Frage zu beantworten.
Rubin legt Zugriffsmodifikatoren public
, protected
und private
auf Methoden nur, und nicht auf Variablen. Zugriffssteuerungen auf Variablen sind nicht wirklich sinnvoll, da sie nur innerhalb der Methoden eines Objekts referenziert werden und niemals mit einem Präfix! Mit anderen Worten, Sie können dies niemals schreiben:
[email protected]
Das ist nur ein Syntaxfehler. Sie können
obj.var
schreiben, wo var
der Name einer Methode. Und die Zugriffskontrollen gelten nur für diese Methode.
Die Tatsache, dass Sie möglicherweise Variablen und Methoden mit dem gleichen Namen machen (mit Ausnahme der @
) ist eigentlich egal. Nur Methoden haben Zugriffskontrollen.
Hoffnung, die hilft, einige verständliche Verwirrung aufzuklären!
Danke. Kann ich in Java "Call Variable" sagen, wenn ich 'my_object.variable' verwende? Ich verstehe, warum ich nicht in Ruby kann. –
Wenn Sie "Anruf" verwenden, um "Zugang" zu meinen, dann wird es von den meisten Leuten verstanden werden. Aber da wir im Allgemeinen von "Funktionsaufrufen" und "Methodenaufrufen" sprechen, ist es wahrscheinlich am besten, den Begriff zu vermeiden, wenn von Variablen gesprochen wird. Aber die Leute werden dich in Java verstehen, obwohl ich denke, dass "Zugriff" oder "Lesen" besser für Variablen ist. Sie rufen Methoden auf, lesen aber Variablen. Wie Sie bemerkt haben, können Sie es in Ruby wirklich nicht sagen. :) Ruby und Java sind hier tatsächlich ganz anders. –
Technisch gesehen gehören Instanzvariablen zu Objekten (auch Instanzen genannt), nicht zu Klassen. Eine Instanzvariable kann nicht von einem anderen * Objekt * aus gesehen werden, nicht von einer anderen Klasse. (Z. B. kann es von einer Methode in einer Unterklasse oder Oberklasse gesehen werden.) –