Teljesen új vagyok a Ruby világban, és kissé összetévesztem a szimbólumok fogalmával. Mi a különbség a szimbólumok és a változók között? Miért nem csak változókat használ?
Köszönet.
Megjegyzések
- Lisp-ben – amelyből a Ruby származik – egy szimbólum lényegében a változó adattípusa; ez azt jelenti, hogy a programot Reflection-stílusban manipulálhatjuk, miközben végrehajtja. (nem a legkoherensebb magyarázat, sajnálom)
Válasz
A változók és szimbólumok különböző dolgok. Egy változó különféle adatokra mutat. A Ruby egy szimbólum sokkal inkább hasonlít egy karaktersorozatra, mint egy változóra.
A Ruby-ban a karakterlánc módosítható, míg a szimbólum megváltoztathatatlan. Ez azt jelenti, hogy a szimbólumból csak egy példányt kell létrehozni. van
x = :my_str y = :my_str
:my_str
csak egyszer jön létre, és x
és y
ugyanarra a memóriaterületre mutatnak. Ha viszont van
x = "my_str" y = "my_str"
a karakterlánc tartalmaz ing my_str
kétszer jön létre, és x
és y
különböző példányokra mutat.
Ennek eredményeként a szimbólumokat gyakran a Ruby-ban szereplő enumok egyenértékűjeként, valamint egy szótár (hash) kulcsaiként használják.
Megjegyzések
- Csak azért, hogy a @mipadi ' s pontot toljuk, amikor egy karakterláncot hasonlítasz, össze kell hasonlítanod minden karaktert egymással. Tehát az azonos húrok összehasonlítása O (n). Míg a rubinszimbólumok összehasonlítják az objektum hivatkozásokat, a boszorkány O (1).
- Miért nincs ez a Pythonban?
- Vigyázni kell, hogy ne használja őket túlságosan is, mivel utoljára tudtam, de én nem néztem ezt meg
rubin > 1.9-ben, a szimbólumok don ' t get gc ' d, és így felemésztheti a memóriát
#mySymbol
. Válasz
A Ruby szimbóluma alapvetően ugyanaz, mint a szimbólum a való világban. Valaminek ábrázolására vagy megnevezésére használják.
A szimbólumokat gyakran használják valamilyen állapot képviseletére, például
order.status = :canceled order.status = :confirmed
Ön a szimbólumot azonnali enumként is szemlélheti. Nem kell meghatároznia egy szimbólumot, hanem csak használja. Ez a cikk nagyon részletesen elmagyarázza.
Megjegyzések
- Jobb magyarázat, mint eddig a legtöbbnek ' tűnik.
Válasz
Általában a változókat általában összekeverik a karakterláncokkal, de megértem, hogy úgy gondolod, mint egy változó. Ez érthető. Gondolj így:
A játékban résztvevő játékosok állapotát szám képviseli. 1 jelentése él, 2 jelentése bizonytalan, 3 jelentése halott. Ez könnyen helyettesíthető szimbólumokkal. A szimbólumok lehetnek :alive
:unsure
és :dead
. Ellenőrizze, hogy egy játékos él-e, ahelyett, hogy ezt tenné:
if player_status == 1
Ezt megteheti:
if player_status == :alive