'passer des paramètres par référence" en Ruby?
En Ruby, est-il possible de passer par référence à un paramètre avec une valeur de type sémantique (par exemple, un Fixnum)?
Je suis à la recherche de quelque chose de similaire à C#'s 'ref ce mot-clé.
Exemple:
def func(x)
x += 1
end
a = 5
func(a) #this should be something like func(ref a)
puts a #should read '6'
Btw. Je sais que je pourrais simplement utiliser:
a = func(a)
Vous devez vous connecter pour publier un commentaire.
Vous pouvez accomplir cela en faisant explicitement passant dans le courant de la liaison:
Ruby ne supporte pas "passer" à tous. Tout est un objet et les références à ces objets-là sont toujours passés par valeur. En fait, dans votre exemple, vous transmettez une copie de la référence à la
Fixnum
Objet par valeur.Le problème avec votre code, que
x += 1
ne pas modifier le passéFixnum
Objet, mais au contraire en crée un tout nouveau et indépendant de l'objet.Je pense, des programmeurs Java pourrait appeler
Fixnum
objets immuable.En Ruby, vous ne pouvez pas passer des paramètres par référence. Pour votre exemple, vous devez retourner la nouvelle valeur et l'assigne à la variable une ou créer une nouvelle classe qui contient la valeur et passer une instance de cette classe autour de. Exemple:
Vous pouvez essayer l'astuce suivante:
http://ruby-doc.org/core-2.1.5/Fixnum.html
Aussi Ruby est le passage par valeur.
Cependant, il semble que des objets composites, comme de la cendre, sont passés par référence:
donne