Inhalt | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11

Offizielle Ruby FAQ

Wenn Sie Fehler melden oder Verbesserungen für diese FAQ vorschlagen möchten, besuchen Sie bitte unser GitHub-Repository und öffnen Sie ein Issue oder einen Pull Request.

Allgemeine Fragen

Was ist Ruby?

Ruby ist eine einfache und leistungsstarke objektorientierte Programmiersprache, die von Yukihiro Matsumoto (der in diesem Dokument und in den Mailinglisten den Spitznamen "Matz" verwendet) geschaffen wurde.

Ähnlich wie Perl ist Ruby gut für die Textverarbeitung geeignet. Wie Smalltalk ist in Ruby alles ein Objekt, und Ruby bietet Blöcke, Iteratoren, Metaklassen und andere nützliche Dinge.

Sie können Ruby zum Schreiben von Servern, zum Experimentieren mit Prototypen und für alltägliche Programmieraufgaben verwenden. Als vollständig integrierte objektorientierte Sprache ist Ruby gut skalierbar.

Ruby-Funktionen

  • Einfache Syntax,
  • Grundlegende OO-Funktionen (Klassen, Methoden, Objekte usw.),
  • Spezielle OO-Funktionen (Mixins, Singleton-Methoden, Umbenennung usw.),
  • Operatorüberladung,
  • Ausnahmebehandlung,
  • Iteratoren und Closures,
  • Garbage Collection,
  • Dynamisches Laden (abhängig von der Architektur),
  • Hohe Portabilität (läuft auf verschiedenen Unices, Windows, DOS, macOS, OS/2, Amiga usw.).

Zeigen Sie mir Ruby-Code!

Definieren wir eine Klasse namens Person mit einem Namen und einem Alter. Wir testen unseren Code, indem wir einige Personen erstellen und sie untersuchen.

class Person
  attr_accessor :name, :age

  def initialize(name, age)
    @name = name
    @age  = age.to_i
  end

  def inspect
    "#{name} (#{age})"
  end
end

p1 = Person.new("Elmo", 4)
p2 = Person.new("Zoe", 7)

p1  # => Elmo (4)
p2  # => Zoe (7)

Nun füllen wir ein Array von Personen auf, indem wir ihre Namen und Alter aus einer Datei ages lesen, die Zeilen wie diese enthält

Bert:    8
Cookie: 11
Elmo:    4
Ernie:   8
Zoe:     7

Der Code verwendet reguläre Ausdrücke, um aufeinanderfolgende Zeilen aus der Eingabedatei zu parsen, für jedes gefundene Muster ein neues Person-Objekt zu erstellen und es am Ende des Arrays people anzuhängen.

people = Array.new

File.foreach("ages") do |line|
  people << Person.new($1, $2) if line =~ /(.*):\s+(\d+)/
end

people  # => [Bert (8), Cookie (11), Elmo (4), Ernie (8), Zoe (7)]

Nun sortieren wir das Ergebnis basierend auf dem Alter der Person. Es gibt viele Möglichkeiten, dies zu tun. Wir können einen Sortierblock definieren, der Ruby sagt, wie der Vergleich zweier Personen durchgeführt werden soll

sorted = people.sort {|a, b| a.age <=> b.age }
sorted  # => [Elmo (4), Zoe (7), Bert (8), Ernie (8), Cookie (11)]

Eine andere Möglichkeit wäre, die Vergleichsmethode für die Klasse Person zu ändern

class Person
  def <=>(other)
    age <=> other.age
  end
end
people.sort  # => [Elmo (4), Zoe (7), Bert (8), Ernie (8), Cookie (11)]

Warum der Name "Ruby"?

Beeinflusst von Perl wollte Matz einen Edelsteinnamen für seine neue Sprache verwenden, also benannte er Ruby nach dem Geburtsstein eines Kollegen.

Später stellte er fest, dass Ruby in mehreren Situationen direkt nach Perl kommt. Bei Geburtssteinen ist Perle Juni, Rubin ist Juli. Bei der Messung von Schriftgrößen ist Perle 5pt, Rubin ist 5,5pt. Er fand, dass Ruby ein guter Name für eine Programmiersprache war, die neuer (und hoffentlich besser) als Perl ist.

(Basierend auf einer Erklärung von Matz in [ruby-talk:00394] am 11. Juni 1999.)

Was ist die Geschichte von Ruby?

Das Folgende ist eine Zusammenfassung eines Beitrags von Matz in [ruby-talk:00382] am 4. Juni 1999. (Der Geburtstag von Ruby wurde in [ruby-list:15977] korrigiert.)

Nun, Ruby wurde am 24. Februar 1993 geboren. Ich sprach mit meinem Kollegen über die Möglichkeit einer objektorientierten Skriptsprache. Ich kannte Perl (Perl4, nicht Perl5), aber es gefiel mir nicht wirklich, weil es den Geruch einer Spielzeugsprache hatte (es hat ihn immer noch). Die objektorientierte Skriptsprache schien sehr vielversprechend.

Ich kannte damals Python. Aber es gefiel mir nicht, weil ich nicht dachte, dass es eine echte objektorientierte Sprache sei – OO-Funktionen schienen ein Zusatz zur Sprache zu sein. Als Sprachmaniac und OO-Fan seit 15 Jahren wollte ich wirklich eine echte objektorientierte, einfach zu bedienende Skriptsprache. Ich suchte danach, fand sie aber nicht.

Also beschloss ich, sie zu machen. Es dauerte mehrere Monate, bis der Interpreter lief. Ich habe die Funktionen, die ich in meiner Sprache haben wollte, hineingesteckt, wie Iteratoren, Ausnahmebehandlung, Garbage Collection.

Dann habe ich die Funktionen von Perl in einer Klassenbibliothek reorganisiert und implementiert. Ich habe Ruby 0.95 im Dezember 1995 in den japanischen Inlands-Newsgroups veröffentlicht.

Seitdem wurden hochaktive Mailinglisten eingerichtet und Webseiten gebildet.

Wo ist die Ruby-Homepage?

Die offizielle Ruby-Homepage ist www.ruby-lang.org. Neben den englischen und japanischen Versionen gibt es Übersetzungen in verschiedene andere Sprachen.

Gute Startpunkte, um Ruby-Informationen zu finden, sind die Seiten Dokumentation und Community.

Gibt es eine Ruby-Newsgruppe?

comp.lang.ruby wurde im Mai 2000 eingerichtet (dank der Bemühungen von Conrad Schneiker).

Gibt es eine Ruby-Mailingliste?

Es gibt mehrere Mailinglisten, die über Ruby sprechen. Weitere Informationen finden Sie auf der Seite Mailinglisten.

Sie können die Mailinglistenarchive unter https://ml.ruby-lang.org/archives/list/ruby-talk@ml.ruby-lang.org/ durchsuchen. (Dies ist die URL für die ruby-talk-Liste, passen Sie sie für die anderen Listen entsprechend an.)

Wie kann ich die Mailingliste in mutt nach Themen gruppieren?

Dieser Abschnitt oder Teile davon könnten veraltet oder nicht bestätigt sein.

Bei einigen Ruby-Mailinglisten fügt die Mailinglistensoftware ein Präfix zu den Betreffzeilen hinzu, z. B. ruby-core:1234. Dies kann die Threading-Funktion in einigen Mail-User-Agents stören.

In mutt können Sie die Threading-Funktion mit der folgenden Variableneinstellung zum Laufen bringen.

# reply regexp, to support MLs like ruby-talk.
set reply_regexp="^(\[[a-z0-9:-]+\][[:space:]]*)?(re([\[0-9\]+])*|aw):[[:space:]]*"

Was ist korrekt, "Ruby" oder "ruby"?

Offiziell heißt die Sprache "Ruby". Auf den meisten Systemen wird sie mit dem Befehl ruby aufgerufen. Es ist in Ordnung, "ruby" anstelle von "Ruby" zu verwenden.

Bitte verwenden Sie nicht "RUBY" als Sprachnamen.

Ursprünglich oder historisch hieß es "ruby".

Gibt es Ruby-Bücher?

Dieser Abschnitt oder Teile davon könnten veraltet oder nicht bestätigt sein.

  • Programming Ruby: The Pragmatic Programmer’s Guide, (das Pickaxe-Buch) von David Thomas und Andrew Hunt: ISBN 0-20171-089-7, Addison-Wesley, Oktober 2000.

  • Ein japanischsprachiges Ruby-Referenzbuch von Matz et al. und veröffentlicht von ASCII ist in Japan erhältlich (ISBN 4-7561-3254-5). Eine englische Übersetzung, "The Ruby Programming Language", ist bei O’Reilly & Associates erhältlich (ISBN 978-0596516178).

  • Ein japanischsprachiges "Ruby Pocket Reference" wird von O’Reilly Japan veröffentlicht (ISBN 4-87311-023-8). Lassen Sie O’Reilly in den USA wissen, wenn Sie eine Übersetzung wünschen.

  • Darüber hinaus ist "Mastering Regular Expressions" von Jeffrey Friedl (das Hip Owl Book): ISBN 1-56592-257-3 von O’Reilly & Associates ein Referenzwerk, das die Kunst und Implementierung von regulären Ausdrücken in verschiedenen Programmiersprachen behandelt. Der größte Teil davon ist für Ruby-Reguläre Ausdrücke sehr relevant.

Welche Editoren unterstützen Ruby?

Dieser Abschnitt oder Teile davon könnten veraltet oder nicht bestätigt sein.

  • Emacs oder XEmacs: ruby-mode.el wird in der Ruby-Distribution mitgeliefert. Bei einigen Versionen von XEmacs müssen Sie möglicherweise (load "font-lock") zu Ihrer .emacs-Datei hinzufügen, damit ruby-mode.el das von Ihnen verwendete Syntaxhervorhebungs-Paket erkennen kann.
  • Vim: Vim 5.7 und höher haben Ruby-Syntaxdateien standardmäßig im Runtime-Paket. Für frühere Versionen ist eine Syntaxdatei für Ruby unter http://www.xs4all.nl/~hipster/lib/ruby/ruby.vim verfügbar.
  • Jedit: Ein tragbarer Editor, geschrieben in Java, wird mit Unterstützung für Ruby geliefert.
  • Nedit: Eric Santonacci hat Ruby-Unterstützung für Nedit geschrieben, erhältlich unter ftp://ftp.talc.fr/pub/ruby/ruby.nedit-0.1.tar.gz.
  • Barry Shultz hat eine Ruby-Definitionsdatei für TextPad geschrieben, die unter https://www.textpad.com/add-ons/synn2t.html verfügbar ist.

Wie kann ich Ruby-Code mit seinen Ergebnissen annotieren?

Dieser Abschnitt oder Teile davon könnten veraltet oder nicht bestätigt sein.

Man annotiert Ruby-Code üblicherweise, indem man die Ergebnisse der Ausführung jeder Anweisung als Kommentar an diese Anweisung anhängt. Zum Beispiel zeigen wir im folgenden Code, dass die Zuweisung die Zeichenkette "Billy Bob" erzeugt, und dann das Ergebnis des Extrahierens einiger Teilstrings.

str = "Billy" + " Bob"           # => "Billy Bob"
str[0,1] + str[2,1] + str[-2,2]  # => "Blob"

Emacs- und Vim-Benutzer können dies in ihre Bearbeitungsumgebungen integrieren, was nützlich ist, wenn Sie Leuten E-Mails mit annotiertem Ruby-Code senden möchten. Nach der Installation von xmp können Emacs-Benutzer Folgendes zu ihrer .emacs-Datei hinzufügen

(defun ruby-xmp-region (reg-start reg-end)
  "Pipe the region through Ruby's xmp utility and replace the region with
   the result."
  (interactive "r")
  (shell-command-on-region reg-start reg-end
                           "ruby -r xmp -n -e 'xmp($_, \"%l\t\t# %r\n\")'"
                           t))
(global-set-key [(meta f10)] 'ruby-xmp-region)

Vim-Benutzer können die Zuordnung verwenden (danke an hipster)

map <M-F10> :!ruby -r xmp -n -e 'xmp($_, "\%l\t\t\# \%r\n")'<CR>

In beiden Fällen markieren Sie einen Codebereich und drücken Sie Meta-F10, um ihn zu annotieren.

Ich verstehe Ruby nicht, auch nachdem ich das Handbuch gelesen habe!

Dieser Abschnitt oder Teile davon könnten veraltet oder nicht bestätigt sein.

Die Syntax von Ruby ist seit Ruby 1.0 ziemlich stabil, aber von Zeit zu Zeit werden neue Funktionen hinzugefügt. Daher können die Bücher und die Online-Dokumentation hinterherhinken.

Wenn Sie ein Problem haben, fragen Sie gerne in der Mailingliste (siehe Mailinglisten-Seite). Im Allgemeinen erhalten Sie zeitnahe Antworten von Matz selbst, dem Autor der Sprache, von anderen Gurus und von denen, die Probleme ähnlich wie Ihre gelöst haben.

Bitte fügen Sie die Ausgabe von ruby -v zusammen mit dem problematischen Quellcode bei.

Wenn Sie Probleme mit irb haben, beachten Sie, dass es einige Einschränkungen gibt. Versuchen Sie das Skript mit irb --single-irb oder direkt mit dem ruby-Befehl auszuführen.

Möglicherweise gibt es ähnliche Fragen in der Mailingliste, und es ist gute Netiquette, die aktuellen E-Mails zu lesen (RFC1855:3.1.1, 3.1.2), bevor Sie fragen. Aber fragen Sie in der Liste, und eine korrekte Antwort wird folgen.