Was fuer Twitter zu lang ist

Jan Riethmayer

Dec 10

Ruby singleton klassen

ruby singleton runtime class method

Thu Dec 10 23:25:32 +0100 2009

Ich mache mal ne kleine Serie über Ruby, insbesondere über dynamische Aspekte. Ich stelle mal die Singleton-Klassen an den Anfang.

Singleton

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:

  1. Die Klasse von der sie instanziiert wird
  2. seine Singleton-Klasse

Beispiel: singleton-Methoden auf Objekten definieren

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.

Beispiel: Singleton-Context oeffnen

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"

Beispiel Klassenmethoden

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
blog comments powered by Disqus
(cc) 2009 Jan Riethmayer