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?
Vielen Dank.
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?
Vielen Dank.
Antworten:
Variablen und Symbole sind verschiedene Dinge. Eine Variable verweist auf verschiedene Arten von Daten. In Ruby ähnelt ein Symbol eher einer Zeichenfolge als einer Variablen.
In Ruby ist eine Zeichenfolge veränderlich, während ein Symbol unveränderlich ist. Das bedeutet, dass nur eine Kopie eines Symbols erstellt werden muss. Also, wenn Sie haben
x = :my_str
y = :my_str
:my_str
wird nur einmal erstellt x
und y
verweist auf denselben Speicherbereich. Auf der anderen Seite, wenn Sie haben
x = "my_str"
y = "my_str"
eine Zeichenfolge , die my_str
erstellt wird zweimal , und x
und y
auf verschiedene Instanzen verweisen.
Daher werden Symbole häufig als Entsprechung zu Enums in Ruby sowie als Schlüssel für ein Wörterbuch (Hash) verwendet.
#mySymbol
.
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 beispielsweise einen Zustand darzustellen
order.status = :canceled
order.status = :confirmed
Sie können das Symbol auch als Instant Enum betrachten. Sie müssen kein Symbol definieren, sondern verwenden es nur. Dieser Artikel erklärt es ausführlich.
Normalerweise neigen Variablen dazu, mit Zeichenfolgen verwechselt zu werden, aber ich kann verstehen, dass Sie es wie eine Variable denken. Es ist verständlich. Denk darüber so:
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 sein :dead
. So überprüfen Sie, ob ein Spieler am Leben ist:
if player_status == 1
Sie könnten dies tun:
if player_status == :alive