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