更改方法中传递的变量

如何使用方法更改变量的内容? 也许我不是说得对。 有什么方法可以像C中那样获取变量的引用? 例:

// main stuff int gorilla = 29; makeMeABanana(&gorilla); void makeMeABanana(int *gorilla) { } 

我怎么能在Ruby中做这样的事情?

最近在ruby-talk邮件列表中,有人问起写交换函数,其中swap(a,b)将交换变量“a”和“b”的值。 通常这不能在Ruby中完成,因为交换函数没有引用调用函数的绑定。

但是,如果我们明确地传递了绑定,那么就可以编写类似交换的函数。 这是一个简单的尝试:

  def swap(var_a, var_b, vars) old_a = eval var_a, vars old_b = eval var_b, vars eval "#{var_a} = #{old_b}", vars eval "#{var_b} = #{old_a}", vars end a = 22 b = 33 swap ("a", "b", binding) pa # => 33 pb # => 22 

这实际上有效! 但它有一个很大的缺点。 “a”和“b”的旧值被内插到字符串中。 只要旧值是简单的文字(例如整数或字符串),那么最后两个eval语句将如下所示:eval“a = 33”,vars“。但是如果旧值是复杂对象,则eval会显示比如eval“a =#”,vars。哎呀,这对于任何无法在往返一个字符串并返回的情况下无法生存的值都会失败。

参考自: http : //onestepback.org/index.cgi/Tech/Ruby/RubyBindings.rdoc

你不应该这样做 – 你只是移植完全适合C到Ruby的技术,它们不再适合。 有几种奇特的方法(例如使用Proc关闭你的调用命名空间或eval)但它们通常不适用于Ruby,除非你确切地知道你在做什么。

整数是具有id的对象,就像Ruby中的其他所有东西一样。 它们是这样实现的:

 p (0..10).map{|n| n.object_id} #=>[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21] 

所有其他对象甚至都有object_id数字。 没有办法将7(object_id 15)更改为其他内容。