Jestem zupełnie nowy w świecie Ruby i jestem trochę zdezorientowany pojęciem Symboli. Jaka jest różnica między symbolami a zmiennymi? Dlaczego nie użyć tylko zmiennych?
Dzięki.
Jestem zupełnie nowy w świecie Ruby i jestem trochę zdezorientowany pojęciem Symboli. Jaka jest różnica między symbolami a zmiennymi? Dlaczego nie użyć tylko zmiennych?
Dzięki.
Odpowiedzi:
Zmienne i symbole to różne rzeczy. Zmienna wskazuje na różnego rodzaju dane. W Ruby symbol jest bardziej ciągiem niż zmienną.
W Ruby ciąg znaków jest zmienny, a symbol jest niezmienny. Oznacza to, że należy utworzyć tylko jedną kopię symbolu. Tak więc, jeśli masz
x = :my_str
y = :my_str
:my_str
zostanie utworzony tylko raz x
i y
wskaże ten sam obszar pamięci. Z drugiej strony, jeśli masz
x = "my_str"
y = "my_str"
łańcuch zawierający my_str
zostaną utworzone dwa razy , a x
i y
będzie wskazywać na różnych przypadkach.
W rezultacie symbole są często używane jako odpowiedniki wyliczeń w Rubim, a także klucze do słownika (skrótu).
#mySymbol
.
Symbol w Ruby jest w zasadzie tym samym, co symbol w prawdziwym świecie. Służy do reprezentowania lub nazwania czegoś.
Symbole są bardzo często używane do reprezentowania pewnego rodzaju stanu, na przykład
order.status = :canceled
order.status = :confirmed
Możesz także spojrzeć na symbol jako natychmiastowe wyliczenie. Nie musisz definiować symbolu, wystarczy go użyć. W tym artykule szczegółowo to wyjaśniono.
Zwykle zmienne są mylone z ciągami, ale rozumiem, że myślisz o tym jak o zmiennej. To jest do zrozumienia. Pomyśl o tym w ten sposób:
Status gracza w grze jest reprezentowany przez liczbę. 1 oznacza żywego, 2 oznacza niepewnego, 3 oznacza martwego. Można to łatwo zastąpić symbolami. Symbole mogą być :alive
:unsure
i :dead
. Aby sprawdzić, czy gracz żyje, zamiast tego:
if player_status == 1
Możesz to zrobić:
if player_status == :alive