Ruby LanguageSimbolos


Sintaxis

  • :símbolo
  • :'símbolo'
  • :"símbolo"
  • "símbolo" .to_sym
  • % s {símbolo}

Observaciones

Ventajas de usar símbolos sobre cadenas:

1. Un símbolo de Ruby es un objeto con comparación O (1)

Para comparar dos cadenas, potencialmente debemos mirar a cada personaje. Para dos cadenas de longitud N, esto requerirá N + 1 comparaciones

def string_compare str1, str2
  if str1.length != str2.length
        return false
  end
  for i in 0...str1.length
    return false if str1[i] != str2[i]
  end
  return true
end
string_compare "foobar", "foobar"

Pero dado que cada aparición de: foobar se refiere al mismo objeto, podemos comparar los símbolos mirando los ID de los objetos. Podemos hacer esto con una sola comparación. (O (1))

def symbol_compare sym1, sym2
  sym1.object_id == sym2.object_id
end
symbol_compare :foobar, :foobar

2. Un símbolo de Ruby es una etiqueta en una enumeración de forma libre

En C ++, podemos usar "enumeraciones" para representar familias de constantes relacionadas:

enum BugStatus { OPEN, CLOSED };
BugStatus original_status = OPEN;
BugStatus current_status  = CLOSED;

Pero debido a que Ruby es un lenguaje dinámico, no nos preocupamos por declarar un tipo de estado de error o por mantener un registro de los valores legales. En cambio, representamos los valores de enumeración como símbolos:

original_status = :open
current_status  = :closed

3. Un símbolo de rubí es un nombre constante y único.

En Ruby, podemos cambiar el contenido de una cadena:

"foobar"[0] = ?b # "boo"

Pero no podemos cambiar los contenidos de un símbolo:

:foobar[0]  = ?b # Raises an error

4. Un símbolo de Ruby es la palabra clave para un argumento de palabra clave

Al pasar argumentos de palabras clave a una función Ruby, especificamos las palabras clave usando símbolos:

# Build a URL for 'bug' using Rails.
url_for :controller => 'bug',
        :action => 'show',
        :id => bug.id

5. Un símbolo de rubí es una excelente opción para una clave hash

Normalmente, usaremos símbolos para representar las claves de una tabla hash:

options = {}
options[:auto_save]     = true
options[:show_comments] = false

Simbolos Ejemplos relacionados