2011-07-17 20 views
5

He estado buscando en los últimos días cómo entender los Símbolos en Ruby. Leí cada artículo en Google sobre los símbolos de Ruby, la mayoría de ellos son malas explicaciones, así que vengo aquí, y veo que algunas preguntas sobre este tema existen, pero no entiendo, lo siento.No se puede entender el símbolo de Ruby

Según lo que he leído, entiendo que los símbolos son inmutables y únicos, por lo que el consumo de memoria y el rendimiento son mejores que los de las cadenas normales.

Pregunta # 1
son símbolos propósito en la vida para servir al mismo nicho como cadenas? El propósito de los símbolos es funcionar como constantes convenientes sin llevar un valor, como la parte siguiente: ¿es el valor real?

Pregunta # 2
Cuando puedo saber realmente dónde utilizar los símbolos?

Apreciaría mucho sus propias explicaciones de símbolos en lugar de enlazar con artículos en Google (¡me aseguro de que ya lo haya leído!).

También aprecio su tiempo si puede proporcionar más información acerca de símbolos de lo que ya he preguntado aquí, porque no los entiendo en absoluto, ni siquiera lo que está almacenado en: symbol_something, es una referencia o qué ?

¡Muchas gracias por su ayuda!

+0

posible duplicado de [Descripción de símbolos en Ruby] (http://stackoverflow.com/questions/2341837/understanding-symbols-in-ruby) –

Respuesta

6

Los símbolos en rubí son una forma de utilizar de manera eficiente cadenas inmutables. Por ejemplo, supongamos que quiere usar la cadena "mi_clave" como una clave hash. Simplemente usar la cadena es un desperdicio de espacio y eficiencia ya que cada vez que especifica la clave hash "mi_clave" está creando una instancia de cadena diferente en una ubicación de memoria diferente aunque el contenido del valor de la cadena sea el mismo. Entonces, si tienes 100 instancias de my_hash ['my_key'], tienes 100 instancias de la cadena 'my_key'. No es así con el símbolo: my_key. Solo hay una instancia de: mi_clave sin importar cuantas veces la utilices.

Debe usar símbolos en los que normalmente usaría una cadena inmutable como identificador.

+1

Gracias, ¿así que es así de simple? –

+3

@Frank Zimmer: Básicamente. Los símbolos no son ningún tipo de magia profunda. Lo bueno de los símbolos está más en el "por qué" que en el "cómo"."Cuando ve una cadena, necesita preguntarse si se trata de texto o como un token especial (si ve la cadena 'baja' como argumento de una función), eso es decirle a la función que algo debe contener todas las minúsculas string "low", o que debería tener baja prioridad?). Las cadenas en Ruby están ahí para el primer caso, símbolos para el segundo. – Chuck

+0

@Chuck: Excelente explicación, deberías haberlo convertido en una respuesta. –

1

La forma de entender esto es considerar que String es un objeto Ruby y no se especifica que sea inmutable. Como resultado, un número de optimizaciones no están disponibles para el procesador de lenguaje y un lector del código puede o no comprender si una cadena dada está funcionando como una estructura de datos mutable o como la clave de algo.

Pero los símbolos son inmutables, por lo que tienen instancias únicas. También son fáciles de escribir, y el uso de un símbolo indica claramente "identificador" o "token" a cualquiera que lea el código más adelante.

Por último, Símbolo clase implementa la conversión explícita #to_s, modo símbolos son seguros de usar en expresiones donde se sabe #to_s serán llamados, como en ERB templates o en las operaciones de E/S.

Cuestiones relacionadas