2016-10-20 4 views
0

Die Standardmethode wäre so etwas wieWie ruft man eine Funktion auf, die eine Variable in Ruby verändert?

foo = bar(foo) 

sein Aber ich würde eine Art gefällt, wie einfach

bar(foo) 

zu schreiben, die den Wert von foo wie die erste Zeile ändern würde. In C++ konnte ich das mit Zeigern machen, aber mit Ruby weiß ich nicht wie.

+0

Ruby hat keine Zeiger, also können Sie solche Dinge hier nicht tun. –

+0

Sie können Dinge wie 'def m (s) sagen; s.gsub! (...); end', um ein Argument zu ändern, obwohl Ruby pass-by-value ist (wobei die Werte Referenzen sind). Du kannst auch hässliche Dinge wie 'h [: arg] = 6; m (h) 'und enden mit einem anderen' h [: arg] '. Nicht empfohlen, aber manchmal sind unangenehme Dinge notwendig. –

Antwort

3

Dies ist in Ruby nicht möglich. Sie müssen foo = bar(foo) schreiben. Eine andere Option wäre foo ein veränderbares Objekt zu sein. Dann könnte bar Methoden aufrufen, um es zu mutieren. Beispiel: Wenn foo ein String, Hash oder Array ist, kann barfoo.replace aufrufen, um das Objekt zu ändern, auf das sich foo bezieht.

+0

Das würde die Variable jedoch nicht mutieren. Es würde das Objekt mutieren. –

0

Dies ist nicht möglich. Was Sie suchen, ist eine Form des Pass-by-Reference. Ruby ist jedoch streng pass-by-value.

Verwandte Themen