significa que funcion example elemento definir contadores como arreglo agregar ruby string symbols

que - hash.map ruby



¿Cuál es la diferencia entre una cadena y un símbolo en Ruby? (10)

¿Cuáles son las diferencias entre Symbols & Strings?

  1. Los símbolos son inmutables: su valor permanece constante.
  2. Los usos múltiples del mismo símbolo tienen el mismo ID de objeto y son el mismo objeto en comparación con la cadena, que será un objeto diferente con ID de objeto único, siempre.
  3. No puede llamar a ninguno de los métodos String como #upcase, #split on Symbols.

De entender las diferencias entre símbolos y cadenas en Ruby

Si eres chino, también puedes leer 理解 Ruby Symbol

¿Cuál es la diferencia entre una cadena y un símbolo en Ruby y cuándo deberías usar uno sobre el otro?



Hay dos diferencias principales entre cadena y símbolo en Ruby.

  1. La cadena es mutable y el símbolo no es

    • Debido a que la cadena es mutable, se puede cambiar en alguna parte y puede dar lugar a que el resultado no sea correcto.

    • El símbolo es inmutable.

  2. String es un Objeto por lo que necesita asignación de memoria

    pone "abc" .object_id # 70322858612020

    pone "abc" .object_id # 70322846847380

    pone "abc" .object_id # 70322846815460

Por otro lado, Symbol tendrá el mismo objeto:

puts :abc.object_id # 1147868 puts :abc.object_id # 1147868 puts :abc.object_id # 1147868

Por lo tanto, el String tomará más tiempo para usarlo y compararlo que Symbol.

Puede leer más aquí para comprender completamente:


La declaración

foo = "bar"

crea un nuevo objeto en la memoria. Si repetimos la declaración

foo = "bar"

Creamos otro objeto

para obtenerlo más claramente, prueba el siguiente código en la consola ruby

foo = "bar" puts "string #{foo} with object id = #{foo.object_id}" foo = "bar" puts "string #{foo} with object id = #{foo.object_id}"

obtendrás resultados como

string bar with object id = 70358547221180 string bar with object id = 70358548927060

que muestra claramente que hay dos objetos diferentes para la misma cadena. Ahora, si usas un símbolo, creará un objeto por cada símbolo

foo = :bar puts "symbol #{foo} with object id = #{foo.object_id}" foo = :bar puts "symbol #{foo} with object id = #{foo.object_id}"

muestra

symbol bar with object id = 7523228 symbol bar with object id = 7523228

lo que significa que solo hay un objeto para: bar

otros Símbolos son inmutables y no puedes llamar a ninguno de los métodos de Cadena como #upcase, #split on Symbols.

La comparación de símbolos es más rápida que la comparación de cadenas.

Los símbolos se pueden considerar como cadenas constantes / inmutables que forman un conjunto único que se convierte efectivamente en punteros de memoria en el montón. Esto significa que comparar dos símbolos es rápido porque solo está comparando 2 enteros (punteros de memoria).

Las cadenas son mutables, por lo que el puntero de memoria a su valor en el montón puede cambiar después de la modificación. Esto significa que las operaciones de comparación son más lentas porque pueden existir duplicados que son semánticamente equivalentes.

Usos

use Symbol cuando esté seguro de que el valor permanecerá constante. Ejemplo: use símbolos para las teclas hash, use una cadena cuando quiera cambiar el valor o quiera usar el método de cadena en él.


La principal diferencia es que los símbolos múltiples que representan un único valor son idénticos, mientras que esto no es así con las cadenas. Por ejemplo:

irb(main):007:0> :test.object_id => 83618 irb(main):008:0> :test.object_id => 83618 irb(main):009:0> :test.object_id => 83618

3 referencias al símbolo: prueba, todo el mismo objeto.

irb(main):010:0> "test".object_id => -605770378 irb(main):011:0> "test".object_id => -605779298 irb(main):012:0> "test".object_id => -605784948

3 referencias a la cadena "prueba", todos los diferentes objetos.

Esto significa que el uso de símbolos puede ahorrar un buen bit de memoria dependiendo de la aplicación. También es más rápido comparar símbolos para igualdad ya que son el mismo objeto, la comparación de cadenas idénticas es mucho más lenta ya que los valores de cadena deben compararse en lugar de solo los identificadores de objeto.

En cuanto a cuándo usarlo, suelo usar cadenas para casi todo, excepto cosas como claves hash, en las que realmente quiero un identificador único, no una cadena.



Los símbolos y las cadenas son completamente diferentes; esta publicación tiene una pequeña idea de las diferencias. En cuanto a cuándo y dónde usarlos, hay una publicación bastante extensa sobre este tema que tiene muchas: a través de .


Un símbolo es algo que usa para representar nombres y cadenas. Es posible que desee utilizar un símbolo cuando necesite usar una cadena varias veces, ya que es mucho más fácil y productivo.

Y acabo de encontrar esto a través de google, que puede ofrecer más detalles: aquí tienes


Una diferencia adicional entre String y Symbol es que una String tiene muchos más métodos para la manipulación de cadenas, mientras que un Symbol es un objeto relativamente delgado.

Consulte la documentación de la clase String y la clase Symbol .


el símbolo es inmutable y la cadena es mutable.

cuando realizamos cualquier operación en una cadena, entonces crea un nuevo objeto y toma el memery. A medida que hemos realizado más y más operaciones en cadena, estamos consumiendo más y más memoria.

el símbolo es un objeto que es inmutable significa que si realizamos cualquier operación, entonces realiza cambios en el objeto original, no creará ningún objeto, por eso es más rentable.

para más información, puede hacer clic aquí