gpt4 book ai didi

ruby - ruby 中的变量引用

转载 作者:数据小太阳 更新时间:2023-10-29 07:50:07 26 4
gpt4 key购买 nike

很明显,ruby 似乎是一种传递引用语言:

$ irb --simple-prompt 
>> @foo=1
=> 1
>> @bar=2
=> 2
>> @foo.object_id
=> 3
>> @bar.object_id
=> 5
>> [@foo,@bar].each {|e| puts e.object_id }
3
5
=> [1, 2]

即,构造数组和 block 似乎都处理对原始类实例变量对象的引用。

但是,这些引用似乎在我尝试写入它们时立即创建了副本:

>> [@foo,@bar].each {|e| puts e+=1 }
2
3
=> [1, 2]
>> @foo
=> 1
>> @bar
=> 2
>> [@foo,@bar].map! {|e| e+1 }
=> [2, 3]
>> @foo
=> 1
>> @bar
=> 2

我有一些需要通过函数转换的类实例变量对象,所以我想我可以通过使用按引用传递的方式来保存击键,并执行如下操作:

[@var1, @var2, @var3].map! {|v| my_function(v) }

但由于似乎正在进行的这种写时复制操作,它似乎无法正常工作。

有没有办法关闭它?在保持代码干爽和高效的同时,您将如何完成我的任务?

最佳答案

Ruby 始终是按值传递的。但在某些情况下,这个值是一个指针(我猜,有些人认为是按引用传递)。

编辑:

基于 Arup 的回答,这里有一个只处理一些 ivars 的版本。

[:@foo, :@bar].each do |var| 
instance_variable_set(var, myfunction(instance_variable_get(var)))
end

关于ruby - ruby 中的变量引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20130054/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com