Was ist ein Symbol in Ruby?

Ich bin völlig neu in der Ruby-Welt und ein bisschen verwirrt mit dem Konzept der Symbole. Was ist der Unterschied zwischen Symbolen und Variablen? Warum nicht einfach Variablen verwenden?

Danke.

Kommentare

  • in Lisp – von dem Ruby abgeleitet ist – Ein Symbol ist im Wesentlichen im Wesentlichen der Datentyp für eine Variable. Dies bedeutet, dass Sie das Programm während der Ausführung reflexionsartig bearbeiten können (leider nicht die kohärenteste Erklärung).

Antwort

Variablen und Symbole sind verschiedene Dinge. Eine Variable zeigt auf verschiedene Arten von Daten. Ein Symbol ähnelt eher einer Zeichenfolge als einer Variablen.

In Ruby ist eine Zeichenfolge veränderbar, während ein Symbol unveränderlich ist. Dies bedeutet, dass nur eine Kopie eines Symbols erstellt werden muss

x = :my_str y = :my_str 

:my_str wird nur einmal erstellt und x und y zeigen auf denselben Speicherbereich. Wenn Sie dagegen

x = "my_str" y = "my_str" 

a haben Zeichenfolge enthalten my_str wird zweimal erstellt und x und y verweist auf verschiedene Instanzen.

Daher werden Symbole häufig als Äquivalent zu Aufzählungen in Ruby sowie als Schlüssel zu einem Wörterbuch (Hash) verwendet.

Kommentare

  • Nur um den Punkt von @mipadi ' zu drücken, müssen Sie beim Vergleichen eines Strings jedes Zeichen miteinander vergleichen. Der Vergleich identischer Zeichenfolgen ist also O (n). Während Rubinsymbole Objektreferenzen vergleichen, die O (1) sind.
  • Warum hat Python das nicht?
  • Sie sollten darauf achten, sie auch nicht zu überbeanspruchen, da ich zuletzt wusste, Aber ich habe ' dies nicht in Ruby > 1.9 untersucht, Symbole nicht ' t get gc ' d und kann so Speicher verschlingen
  • Sie verhalten sich in Smalltalk identisch, außer dass sie wie #mySymbol aussehen .
  • @ frogstarr78 – Wenn Sie keine Symbole programmgesteuert generieren (Zeichenfolgen internieren, ohne sie zuerst zu überprüfen), müssen Sie sich ' nicht darum kümmern, zu viele Symbole zu erstellen.

Antwort

Symbol in Ruby ist im Grunde dasselbe wie Symbol in der realen Welt. Es wird verwendet, um etwas darzustellen oder zu benennen.

Symbole werden sehr häufig verwendet, um einen Zustand darzustellen, z. B.

order.status = :canceled order.status = :confirmed 

Sie kann das Symbol auch als sofortige Aufzählung betrachten. Sie müssen kein Symbol definieren, sondern verwenden es einfach. In diesem Artikel wird es ausführlich erläutert.

Kommentare

  • Bessere Erklärung als die meisten, die ich bisher ' habe.

Antwort

Normalerweise werden Variablen mit Zeichenfolgen verwechselt, aber ich kann verstehen, dass Sie es wie eine Variable denken. Es ist verständlich. Stellen Sie sich das so vor:

Der Status eines Spielers in einem Spiel wird durch eine Zahl dargestellt. 1 bedeutet lebendig, 2 bedeutet unsicher, 3 bedeutet tot. Dies kann leicht durch Symbole ersetzt werden. Die Symbole könnten :alive :unsure und :dead sein. So überprüfen Sie, ob ein Spieler am Leben ist:

if player_status == 1

Sie können Folgendes tun:

if player_status == :alive

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.