Mi a szimbólum a Ruby-ban?

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

  • A Smalltalkban azonos módon viselkednek, csakhogy #mySymbol .
  • @ frogstarr78 – Hacsak nem szisztematikusan nem generál szimbólumokat (internálja a húrokat anélkül, hogy azokat először ellenőrizné), akkor nem kell ' aggódnia, hogy túl sok szimbólumot készít.
  • 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

    Vélemény, hozzászólás?

    Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük