¿Qué es un símbolo en Ruby?

Soy totalmente nuevo en el mundo de Ruby y estoy un poco confundido con el concepto de Símbolos. ¿Cuál es la diferencia entre símbolos y variables? ¿Por qué no usar solo variables?

Gracias.

Comentarios

  • en Lisp – del que se deriva Ruby – un símbolo es esencialmente el tipo de datos de una variable; eso significa que puede manipular el programa de una manera Reflection-esque mientras se ejecuta (no es la explicación más coherente, lo siento)

Respuesta

Las variables y los símbolos son cosas diferentes. Una variable apunta a diferentes tipos de datos. En Ruby, un símbolo se parece más a una cadena que a una variable.

En Ruby, una cadena es mutable, mientras que un símbolo es inmutable. Eso significa que solo se necesita crear una copia de un símbolo. Por lo tanto, si

x = :my_str y = :my_str 

:my_str solo se creará una vez, y x y y apuntan a la misma área de memoria. Por otro lado, si tiene

x = "my_str" y = "my_str" 

un cadena contiene ing my_str se creará dos veces , y x y y apuntará a diferentes instancias.

Como resultado, los símbolos se usan a menudo como equivalentes a enumeraciones en Ruby, así como claves para un diccionario (hash).

Comentarios

  • Solo para presionar el punto de @mipadi ', cuando comparas una cadena necesitas comparar cada carácter entre sí. Entonces, comparar cadenas idénticas es O (n). Mientras que los símbolos ruby comparan referencias de objetos que es O (1).
  • ¿Por qué Python no tiene esto?
  • Debe tener cuidado de no abusar de ellos también, ya que, la última vez que supe, pero no he ' t examinado esto en ruby > 1.9, los símbolos no ' t obtienen gc ' d y, por lo tanto, pueden consumir memoria
  • Se comportan de manera idéntica en Smalltalk, excepto que se ven como #mySymbol .
  • @ frogstarr78 – A menos que esté generando símbolos mediante programación (intercalando cadenas sin verificarlas primero), no ' tiene que preocuparse por hacer demasiados símbolos.

Respuesta

El símbolo en Ruby es básicamente lo mismo que el símbolo en el mundo real. Se usa para representar o nombrar algo.

Los símbolos se usan muy comúnmente para representar algún tipo de estado, por ejemplo

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

Usted también puede ver el símbolo como enumeración instantánea. No es necesario definir un símbolo, solo utilícelo. Este artículo lo explica con gran detalle.

Comentarios

  • Mejor explicación que la mayoría de ' he visto hasta ahora.

Responder

Por lo general, las variables tienden a confundirse con cadenas, pero puedo entender que lo piense como una variable. Es comprensible. Piénselo de esta manera:

El estado de un jugador en un juego está representado por un número. 1 significa vivo, 2 significa inseguro, 3 significa muerto. Esto se puede reemplazar fácilmente por símbolos. Los símbolos pueden ser :alive :unsure y :dead. Para comprobar si un jugador está vivo, en lugar de hacer esto:

if player_status == 1

Puedes hacer esto:

if player_status == :alive

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *