Ik “ben totaal nieuw in de Ruby-wereld, en ik” ben een beetje in de war met het concept van symbolen. Wat is het verschil tussen symbolen en variabelen? Waarom niet alleen variabelen gebruiken?
Bedankt.
Reacties
- in Lisp – waarvan Ruby is afgeleid – een symbool is in wezen het datatype voor een variabele; dat betekent dat je het programma op een Reflection-achtige manier kunt manipuleren terwijl het wordt uitgevoerd. (niet de meest samenhangende verklaring, sorry)
Answer
Variabelen en symbolen zijn verschillende dingen. Een variabele verwijst naar verschillende soorten gegevens. In Ruby, een symbool is meer een string dan een variabele.
In Ruby is een string veranderlijk, terwijl een symbool onveranderlijk is. Dat betekent dat er maar één kopie van een symbool hoeft te worden gemaakt. Dus als je have
x = :my_str y = :my_str
:my_str
wordt maar één keer gemaakt, en x
en y
verwijzen naar hetzelfde geheugengebied. Aan de andere kant, als je
x = "my_str" y = "my_str"
een string bevatten ing my_str
wordt tweemaal gemaakt, en x
en y
verwijst naar verschillende instanties.
Dientengevolge worden symbolen vaak gebruikt als het equivalent van enums in Ruby, evenals sleutels tot een woordenboek (hash).
Opmerkingen
- Om het punt van @mipadi ' te pushen, moet je bij het vergelijken van een string elk karakter met elkaar vergelijken. Het vergelijken van identieke strings is dus O (n). Terwijl ruby-symbolen objectreferenties vergelijken die O (1) is.
- Waarom heeft Python dit niet?
- Je moet oppassen dat je ze ook niet te veel gebruikt, aangezien, voor het laatst wist ik, maar ik heb ' dit niet onderzocht in robijn > 1.9, symbolen niet ' t get gc ' d en kan zo geheugen opeten
- Ze gedragen zich identiek in Smalltalk, behalve dat ze eruitzien als
#mySymbol
. - @ frogstarr78 – Tenzij je programmatisch symbolen genereert (strings interneren zonder ze eerst te controleren), hoef je je ' geen zorgen te maken over het maken van te veel symbolen.
Antwoord
Symbool in Ruby is in wezen hetzelfde als symbool in de echte wereld. Het wordt gebruikt om iets te vertegenwoordigen of een naam te geven.
Symbolen worden heel vaak gebruikt om een soort staat te vertegenwoordigen, bijvoorbeeld
order.status = :canceled order.status = :confirmed
kan ook naar symbool kijken als instant enum. U hoeft geen symbool te definiëren, u gebruikt het gewoon. In dit artikel wordt het gedetailleerd uitgelegd.
Opmerkingen
- Betere uitleg dan de meeste die ik ' tot nu toe lijkt.
Antwoord
Meestal worden variabelen vaak verward met strings, maar ik begrijp dat u het als een variabele denkt. Het is begrijpelijk. Zie het op deze manier:
De status van een speler in een spel wordt weergegeven door een cijfer. 1 betekent levend, 2 betekent onzeker, 3 betekent dood. Dit kan eenvoudig worden vervangen door symbolen. De symbolen kunnen :alive
:unsure
en :dead
zijn. Om te controleren of een speler nog leeft, in plaats van dit te doen:
if player_status == 1
Je zou dit kunnen doen:
if player_status == :alive