关于 ruby 赋值的一点疑问

2014-11-27 15:08:02 +08:00
 royzhanggy
碰到个问题,把一个哈希赋值给一个变量,如果不是在函数里面(哈希作为参数被函数调用)操作,就是按值传递(新分配了一片内存);但是如果在函数中操作,却是按引用传递(修改哈希的内部元素,被赋值的变量也会相应地变化)。
想请教下这是为什么?
4571 次点击
所在节点    Ruby
3 条回复
oaix
2014-11-27 21:00:51 +08:00
楼主是怎么得到这个疑问的。把测试代码发出来看看。我使用没有你说的问题。
```ruby
➜ ~ irb
>> a = {a: 1}
=> {:a=>1}
>> a
=> {:a=>1}
>> b = a
=> {:a=>1}
>> b[:b] = 2
=> 2
>> b
=> {:a=>1, :b=>2}
>> a
=> {:a=>1, :b=>2}
>> b[:a] = 2
=> 2
>> a
=> {:a=>2, :b=>2}
>> b
=> {:a=>2, :b=>2}
>>
➜ ~ ruby -v
ruby 1.9.3p448 (2013-06-27) [i386-cygwin]
```
royzhanggy
2014-11-27 21:20:38 +08:00
@oaix 写个脚本,写个函数,把哈希作为参数传进去,然后在函数里进行变量赋值,就会变成引用传递了....我也不懂为嘛会这样
oaix
2014-11-27 23:36:38 +08:00
@royzhanggy 直接赋值也是引用传递。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/149701

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX