Imn*_*erd 5 ruby methods reference
如何使用方法更改变量的内容?也许我不是说得对.有什么方法可以像C中那样获取变量的引用?例:
// main stuff
int gorilla = 29;
makeMeABanana(&gorilla);
void makeMeABanana(int *gorilla) { }
Run Code Online (Sandbox Code Playgroud)
我怎么能在Ruby中做这样的事情?
你不应该这样做 - 你只是移植完全适合C到Ruby的技术,在那里它们不再合适.有几种奇特的方法(例如使用Proc关闭你的调用命名空间或eval)但它们通常不适用于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)
p a # => 33
p b # => 22
Run Code Online (Sandbox Code Playgroud)
这确实有效!但它有一个很大的缺点。“a”和“b”的旧值被插入到字符串中。只要旧值是简单的文字(例如整数或字符串),那么最后两个 eval 语句将如下所示: eval "a = 33", vars"。但是如果旧值是复杂对象,则 eval 将如下所示就像 eval "a = #", vars. 哎呀,对于任何无法在字符串往返过程中幸存下来的值,这都会失败。
引用自:http ://onestepback.org/index.cgi/Tech/Ruby/RubyBindings.rdoc