gpt4 book ai didi

ruby - 如何从 Ruby 函数返回值以用于程序的其余部分

转载 作者:太空宇宙 更新时间:2023-11-03 17:15:30 25 4
gpt4 key购买 nike

我编写了一个小的 ruby​​ 函数,它根据字符串变量的长度改变它。打印输出显示,在函数中,变量已更改——但是当稍后在程序中调用它时,它总是重置为默认值。

#ruby variable test

def mrn_value(mrn_length, mrn)
if mrn_length < 7
case mrn_length
when 6
mrn = '0' << mrn
return mrn
when 5
mrn = '00' + mrn
return mrn
when 4
mrn = '000' + mrn
return mrn
when 3
puts mrn
mrn = '0000' + mrn
puts mrn
return mrn
when 2
mrn = mrn.to_s
puts 'mrn of 2 length' #prints 'mrn of 2 length'
mrn = '00000' + mrn
puts 'mrn altered in case statement: ' + mrn #prints 'mrn altered in case statement 0000012'
when 1
mrn = '000000' + mrn
return mrn
end
end
end

mrn = 12
mrn = mrn.to_s
mrn_length = mrn.length



mrn_value(mrn_length, mrn)
puts 'Returned MRN: ' + mrn #prints '12'

我需要的是将返回的 MRN 更改为更改后的 MRN。想法?

最佳答案

我建议您阅读更多关于为什么 Ruby 是“按值传递”的内容。在 mrn = 12 中,mrn 是一个变量,一个指向对象的指针,在本例中为 12。

当您将 mrn 传递给 mrn_value 时,您传递的是该指针的副本。现在你有 2 个指针指向同一个对象。当您执行 mrn = '00000' + mrn 时,您告诉第二个指针不再指向 2,而是指向右侧的任何其他内容。如您所见,mrn_value 方法之外的原始 mrn 指针仍指向 2。

您可以在 Posts on StackOverflow on why Ruby is 'pass by value' 上阅读更多内容.给你一个简化的版本来演示:

a = 1

def will_a_be_changed(a)
a = 2
puts a #=> 2
end

will_a_be_changed(a)
puts a #=> 1

关于ruby - 如何从 Ruby 函数返回值以用于程序的其余部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26245803/

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