it-swarm-eu.dev

Co je to symbol v Ruby?

Jsem úplně nový ve světě Ruby) a trochu jsem zmaten konceptem Symboly. Jaký je rozdíl mezi Symboly a Proměnnými? Proč nejenom používat proměnné?

Dík.

49
wassimans

Proměnné a symboly jsou různé věci. Proměnná ukazuje na různé druhy dat. V Ruby je symbol spíš řetězec než proměnná.

V Ruby je řetězec proměnlivý, zatímco symbol je neměnný. To znamená, že je třeba vytvořit pouze jednu kopii symbolu. Pokud tedy máte

x = :my_str
y = :my_str

:my_str bude vytvořeno pouze jednou a x a y ukazují na stejnou oblast paměti. Na druhou stranu, pokud ano

x = "my_str"
y = "my_str"

řetězec obsahující my_str bude vytvořeno dvakrát a x a y budou ukazovat na různé instance.

Jako výsledek, symboly jsou často používány jako ekvivalent k enums v Ruby, stejně jako klíče ke slovníku (hash).

74
mipadi

Symbol v Ruby je v podstatě to samé jako symbol v reálném světě. Používá se k reprezentaci nebo pojmenování něčeho.

Symboly se například velmi často používají k reprezentaci určitého stavu

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

Můžete se také podívat na symbol jako okamžité výčet. Nemusíte definovat symbol, stačí jej použít. Tento článek jej podrobně vysvětluje.

18
Jakub Arnold

Proměnné bývají obvykle zaměňovány s řetězci, ale chápu, že to považujete za proměnnou. Je to pochopitelné. Přemýšlejte o tom takto:

Stav hráče ve hře je reprezentován číslem. 1 znamená živý, 2 znamená nejistý, 3 znamená mrtvý. To lze snadno nahradit symboly. Symboly mohou být :alive:unsure a :dead. Chcete-li zkontrolovat, zda je hráč naživu, místo toho:

if player_status == 1

Dalo by se to udělat:

if player_status == :alive

1
sirsnow