Soy nuevo en Ruby, solo me pregunto si es posible asignar una referencia a una clave hash a una variable.
a = { foo: 1 } b = a[:foo] // I don't want assign the value b = 2 puts a En lugar de asignar el valor, ¿hay alguna forma de asignar una referencia? Es solo que no quiero seguir escribiendo a[:foo] , sino que cada vez que b cambie, quiero reflejarlo en a[:foo] . Tal vez una macro que simplemente reemplace el texto, donde sea que escriba ACCESS_FOO se reemplazará con a[:foo] .
Pido disculpas si esto se pregunta antes. Cada vez que busco punteros, aparece el lenguaje C
no puedes
No hay punteros en Ruby, la variable solo contiene una referencia.
https://roberheaton.com/2014/07/22/is-ruby-pass-by-reference-or-pass-by-value/
Pero puedes implementar tu propio método. probablemente usando eval()
En Ruby, cada variable es solo un puntero/referencia a una instancia, no hay nada más.
a = { foo: "Hello" } b = a[:foo] b.gsub!('e', 'a') puts a.inspect # => { foo: "Hallo" } Entonces, en su ejemplo, b no se le asigna una copia de "Hola", realmente es una referencia a la misma instancia almacenada en el hash.
Sin embargo, cuando asigna una variable, está reemplazando la referencia/puntero almacenado en la variable con otra cosa.
Lo que parece intentar hacer es ir un nivel más profundo: desea tener un puntero a una referencia (supongo que una especie de P** en C). En Ruby puedes resolver esto con cualquier tipo de objeto adicional que pueda almacenar tu valor. ¿Qué tal una matriz?
a = { foo: [1] } b = a[:foo] b[0] = 2 puts a.inspect # => { foo: [2] }