Private Methoden in Ruby

8

Ein Beispiel für den Rails-Controller, der eine private Methode definiert:

%Vor%

Dann wird es in einer Unterklasse von ApplicationController verwendet:

%Vor%

Wie ist es möglich, dass eine private Methode aus ihrer Unterklasse aufgerufen wird? Was bedeutet private in Ruby?

    
rails8 11.09.2015, 13:12
quelle

4 Antworten

13

Private Methoden können nicht mit einem expliziten Empfänger aufgerufen werden. Sie können jedoch von Unterklassen und Instanzen der Klasse aufgerufen werden.

Hier ist eine schöne Erklärung der Methoden public , protected und private in Ruby.

    
Daniel 11.09.2015, 13:21
quelle
5

Was private in Ruby tut, ist anders als in anderen Sprachen, dass Methoden nicht mit expliziten Empfänger aufgerufen werden können.

Aka, Sie können some_variable.some_private_method oder gar self.some_private_method nicht aufrufen.

Das ist alles. Sie werden immer noch vererbt. Sie können mehr hier lesen.

    
ndn 11.09.2015 13:21
quelle
3

Die Unterklasse erbt alle Methoden und Attribute von der Oberklasse, einschließlich ihrer privaten Methoden. Sie rufen tatsächlich die private Methode auf, die zur Unterklasse gehört.

Was Sie nicht tun konnten, ist authorization_method außerhalb von ApplicationController (oder Unterklassen des Authorization Controllers) aufzurufen. Versuchen Sie dies in der Konsole:

%Vor%     
AJFaraday 11.09.2015 13:32
quelle
2

Wie Daniel in erwähnt hat, kann seine Antwort private Methode "nicht mit einem expliziten Empfänger aufgerufen werden". Mit anderen Worten, Sie können keine private Methode mit der Punktnotation aufrufen. Dies unterscheidet sich von Java, wo Sie this.privateMethod() aufrufen können. In Ruby self.private_method schlägt fehl, aber Sie können es stattdessen als private_method bezeichnen.

Aber es gibt eine weitere Möglichkeit, private Methoden von any -Objekten aufzurufen, die Rails intern zum Aufrufen von Vorher / Nachher-Aktionen verwendet.

Wenn Sie eine Instanz obj mit privatem private_method haben, können Sie die Methode folgendermaßen aufrufen:

%Vor%

Realität ist, dass es in Ruby im strengen Sinne keine privaten Methoden gibt. Datenschutz ist "nur Empfehlung, nicht die Regel".

    
dimakura 11.09.2015 17:08
quelle

Tags und Links