ruby parameter-passing pass-by-reference

''pasar parámetro por referencia'' en Ruby?



parameter-passing pass-by-reference (5)

En Ruby no puedes pasar parámetros por referencia. Para su ejemplo, debería devolver el nuevo valor y asignarlo a la variable a o crear una nueva clase que contenga el valor y pasar una instancia de esta clase. Ejemplo:

class Container attr_accessor :value def initialize value @value = value end end def func(x) x.value += 1 end a = Container.new(5) func(a) puts a.value

En Ruby, ¿es posible pasar por referencia un parámetro con semántica de tipo de valor (por ejemplo, un Fixnum)? Estoy buscando algo similar a la palabra clave '' ref '' de C #.

Ejemplo:

def func(x) x += 1 end a = 5 func(a) #this should be something like func(ref a) puts a #should read ''6''

Por cierto. Sé que podría usar:

a = func(a)


Puede lograr esto al pasar explícitamente el enlace actual:

def func(x, bdg) eval "#{x} += 1", bdg end a = 5 func(:a, binding) puts a # => 6


Puedes probar el siguiente truco:

def func(x) x[0] += 1 end a = [5] func(a) #this should be something like func(ref a) puts a[0] #should read ''6''


Ruby no admite "pasar por referencia" en absoluto. Todo es un objeto y las referencias a esos objetos siempre pasan por valor. En realidad, en su ejemplo está pasando una copia de la referencia al Objeto Fixnum por valor.

El problema con el código es que x += 1 no modifica el Objeto Fixnum pasado, sino que crea un objeto completamente nuevo e independiente.

Creo que los programadores de Java llamarían a los objetos Fixnum inmutables .