Bücher online kostenlos Kostenlos Online Lesen
Die Programmiersprache Ruby (German Edition)

Die Programmiersprache Ruby (German Edition)

Titel: Die Programmiersprache Ruby (German Edition) Kostenlos Bücher Online Lesen
Autoren: David Flanagan , Yukihiro Matsumoto
Vom Netzwerk:
gibt keine.
o.private_methods # => Array aller privaten Methoden
o.private_methods(false) # Geerbte private Methoden ausschließen
def o.single; 1; end # Eine Singleton-Methode definieren
o.singleton_methods # => ["single"] (or [:single] in 1.9)
    Es ist auch möglich, eine Klasse nach den Methoden zu fragen, die sie definiert, anstatt eine Instanz der Klasse zu befragen. Die folgenden Methoden werden von
Module
definiert. Genau wie die
Object
-Methoden geben sie in Ruby 1.8 Arrays mit Strings und in Ruby 1.9 Arrays mit Symbolen zurück:
String.instance_methods == "s".public_methods # => true
String.instance_methods(false) == "s".public_methods(false) # => true
String.public_instance_methods == String.instance_methods # => true
String.protected_instance_methods # => []
String.private_instance_methods(false) # => ["initialize_copy",
     # "initialize"]
    Denken Sie daran, dass die Klassenmethoden einer Klasse oder eines Moduls Singleton-Methoden des
Class
- beziehungsweise
Module
-Objekts sind. Um Klassenmethoden aufzulisten, verwenden Sie deshalb
Object.singleton_methods
:
Math.singleton_methods # => ["acos", "log10", "atan2", ... ]
    Neben diesen Auflistungsmethoden definiert die Klasse
Module
einige Prädikate zur Überprüfung, ob eine bestimmte Klasse oder ein Modul die genannte Instanzmethode definiert:
String.public_method_defined? :reverse # => true
String.protected_method_defined? :reverse # => false
String.private_method_defined? :initialize # => true
String.method_defined? :upcase! # => true
    Module.method_defined?
überprüft, ob die genannte Methode als Public- oder Protected-Methode definiert ist. Die Methode erfüllt im Wesentlichen denselben Zweck wie
Object.respond_to?
. In Ruby 1.9 können Sie
false
als zweites Argument übergeben, um anzugeben, dass geerbte Methoden nicht beachtet werden sollen.
    8.4.2 Method-Objekte erhalten
    Um eine bestimmte benannte Methode zu erhalten, rufen Sie für ein beliebiges Objekt
method
oder
instance_method
auf. Ersteres liefert ein aufrufbares
Method
-Objekt, das an den Empfänger gebunden ist, während Letzteres eine
UnboundMethod
zurückgibt. In Ruby 1.9 können Sie Ihre Suche auf Public-Methoden beschränken, indem Sie
public_method
und
public_instance_method
aufrufen. Wir haben diese Methoden und die von ihnen zurückgegebenen Objekte in „6.7 Method-Objekte“ behandelt:
"s".method(:reverse) # => Method-Objekt
String.instance_method(:reverse) # => UnboundMethod-Objekt
    8.4.3 Methoden aufrufen
    Wie weiter oben und in „6.7 Method-Objekte“ erwähnt, können Sie die Methode
method
jedes Objekts verwenden, um ein
Method
-Objekt zu erhalten, das eine benannte Methode dieses Objekts darstellt.
Method
-Objekte besitzen genau wie
Proc
-Objekte eine
call
-Methode; sie können sie verwenden, um die Methode aufzurufen.
    In der Regel ist es einfacher, eine genannte Methode eines angegebenen Objekts mit
send
aufzurufen:
"hallo".send :upcase # => "HALLO": eine Instanzmethode aufrufen
Math.send(:sin, Math::PI/2) # => 1.0: eine Klassenmethode aufrufen
    send
ruft die durch ihr erstes Argument angegebene Methode für ihren Empfänger auf und übergibt alle restlichen Argumente an diese Methode. Der Name »send« entstammt dem objektorientierten Idiom, in dem der Aufruf einer Methode als »Versand einer Nachricht« an ein Objekt bezeichnet wird.
    send
kann jede beliebige benannte Methode eines Objekts aufrufen, einschließlich privater und Protected-Methoden. Wir haben
send
bereits weiter oben verwendet, um die private Methode
remove_const
eines
Module
-Objekts aufzurufen. Da globale Funktionen in Wirklichkeit private Methoden von
Object
sind, können wir
send
verwenden, um diese Methoden für jedes beliebige Objekt aufzurufen (wenngleich wir das in der Praxis wohl eher nicht tun möchten):
"hallo".send :puts, "Welt" # gibt "Welt" aus
    Ruby 1.9 definiert
public_send
als Alternative zu
send
. Diese Methode funktioniert wie
send
, ruft aber nur öffentliche Methoden auf, keine privaten oder Protected-Methoden:
"hallo".public_send :puts, "Welt" # gibt NoMethodError aus
    send
ist eine sehr wichtige Methode von
Object
, besitzt aber einen gängigen Namen, der in Unterklassen überschrieben werden könnte. Deshalb definiert Ruby
__send__
als Synonym und gibt eine Warnung aus, wenn Sie versuchen,
__send__
zu löschen oder neu zu definieren.
    8.4.4 Methoden definieren, ihre Definitionen aufheben und Aliase erstellen
    Wenn Sie eine neue Instanzmethode einer Klasse oder eines Moduls

Weitere Kostenlose Bücher