加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 更改方法中传递的变量

发布时间:2020-12-17 03:27:29 所属栏目:百科 来源:网络整理
导读:参见英文答案 ‘pass parameter by reference’ in Ruby?????????????????????????????????????5个 如何使用方法更改变量的内容?也许我不是说得对.有什么方法可以像C中那样获取变量的引用?例: // main stuffint gorilla = 29;makeMeABanana(gorilla);void
参见英文答案 > ‘pass parameter by reference’ in Ruby?????????????????????????????????????5个
如何使用方法更改变量的内容?也许我不是说得对.有什么方法可以像C中那样获取变量的引用?例:

// main stuff
int gorilla = 29;
makeMeABanana(&gorilla);

void makeMeABanana(int *gorilla) { }

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

解决方法

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读