Was fuer Twitter zu lang ist
Was fuer Twitter zu lang ist
Ich mache mal ne kleine Serie über Ruby, insbesondere über dynamische Aspekte. Ich stelle mal die Singleton-Klassen an den Anfang.
Ein singleton ist nen Design-Pattern, bei dem die Kernaussage wohl kurz und knapp wie folgt definiert werden kann Eine Klasse, deren Anzahl an Instanzen zu jeder Zeit maximal 1 beträgt, ist ein Singleton.
In Ruby ist alles Objekt. Jedes Objekt hat eigentlich zwei Klassen:
Bevor ich hier gross anfange zu erklären, zeig ich erstmal bisserl Code:
# ist das gleiche wie
# str = "test"
str = String.new "test" # => "test"
# hier wird eine singleton-Methode definiert
# oder anders ausgedrueckt: der singleton-Klasse von str wird die Methode length
# hinzugefuegt
def str.length
"#{super} Zeichen"
end
str.length # => "4 Zeichen"
str.class # => String
foo = String.new # => ""
foo.length # => 0
die Methode length existiert also lediglich fuer das Objekt str.
Man kann Methoden auch im Singleton-Context eines Objektes definieren.
str = "test"
# den singleton-context oeffnet man dann mit diesem Konstrukt:
class << test
def zweimal
"#{self} #{self}"
end
end
str.zweimal # => "test test"
Es gibt unterschiedliche Varianten Singleton-Methoden zu definieren. Da alles Objekt ist, kannst du auch den Singleton-Kontext einer Klasse beschreiben:
# oeffnen des Definitions-contextes der Klasse Array
class Array
class << self
def say
puts "hi from array"
end
end
end
# ist dasselbe wie
def Array.say
puts "hi from array"
end
# ist dasselbe wie
class Array
def self.say
puts "hi from array"
end
end