Co je symbol v Ruby?

Jsem ve světě Ruby úplně nový a jsem trochu zmatený konceptem Symbolů. Jaký je rozdíl mezi symboly a proměnnými? Proč nepoužívat pouze proměnné?

Díky.

Komentáře

  • v Lispu – od kterého je Ruby odvozen – symbol je v podstatě datový typ proměnné; to znamená, že s programem můžete při jeho provádění manipulovat způsobem reflexe. (ne nejrozumnější vysvětlení, omlouvám se)

Odpověď

Proměnné a symboly jsou různé věci. Proměnná ukazuje na různé druhy dat. V Ruby, symbol je spíše jako ř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ít

x = :my_str y = :my_str 

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

x = "my_str" y = "my_str" 

a řetězec obsahuje ing my_str bude vytvořen dvakrát a x a y bude ukazovat na různé instance.

Výsledkem je, že symboly jsou často používány jako ekvivalent enumů v Ruby, stejně jako klíče ke slovníku (hash).

Komentáře

  • Stačí posunout bod @mipadi ', když porovnáváte řetězec, musíte porovnávat každý znak proti sobě. Porovnání identických řetězců je tedy O (n). Zatímco rubínové symboly porovnávají odkazy na objekty, jejichž hodnota je O (1).
  • Proč to Python nemá?
  • Měli byste dávat pozor, abyste je také příliš nepoužívali, protože jsem věděl, ale ' t jsem se na to nedíval v ruby > 1.9, symboly don ' t získejte gc ' d, a tak může sníst paměť
  • Chovají se shodně v Smalltalku, až na to, že vypadají jako #mySymbol .
  • @ frogstarr78 – Pokud nevytváříte programově symboly (vkládání řetězců, aniž byste je nejprve zkontrolovali), nemusíte se ' starat o výrobu příliš mnoha symbolů.

Odpověď

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 velmi často používají k reprezentaci nějakého druhu stavu, například

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

se také může na symbol dívat jako na okamžité výčet. Není nutné definovat symbol, stačí jej použít. Tento článek to vysvětluje velmi podrobně.

Komentáře

  • Lepší vysvětlení než většina, jaké se mi zatím ' zdá.

odpověď

Obvykle jsou proměnné obvykle zaměňovány s řetězci, ale rozumím tomu, že si to myslíte jako proměnnou. Je to pochopitelné. Přemýšlejte o tom takto:

Stav hráče ve hře je reprezentován číslem. 1 znamená naživu, 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

Můžete to udělat:

if player_status == :alive

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *