A diferencias de otros lenguajes de programación, en Ruby no tenemos que decirle que tipo de dato va a guardar la variable. Es decir, a las variables le podemos cambiar el tipo de dato en cualquier momento.
Ruby es un lenguaje dinámico (las variables no necesitan ser declaradas) y fuertemente tipado (aunque no necesiten ser declaradas, las variables conservan el tipo del valor al que son inicializadas).
Dentro de irb podemos hacer las siguientes pruebas:
Creamos la variable edad y le asignamos el valor de 30, y nos devuelve 30.
En el siguiente paso llamamos a la variable edad y nos vuelve a devolver 30.
Hacemos la prueba de cambiar el tipo de edad y vemos que lo admite:
Referencias a Objectos
Las variables contienen referencias a objectos, no los objetos mismos.
person1 = "Tim" person2 = person1 person1[0] = 'J' puts "#{person1} id-->,#{person1.__id__}" # --> Jim id-->,47286622078780 puts "#{person2} id-->,#{person2.__id__}" # --> Jim id-->,47286622078780
Para evitar el «aliasing» se usa dup:
person1 = "Tim" person2 = person1.dup person1[0] = 'J' puts "#{person1} id-->,#{person1.__id__}" # --> Jim id-->,47444571720960 puts "#{person2} id-->,#{person2.__id__}" # --> Tim id-->,47444571720860
Para impedir que alguien cambie un objecto, se puede utilizar también el freezing.
person1 = "Tim" person2 = person1 person1.freeze person2[0] = "J" # can't modify frozen String (FrozenError)