我在ruby类中有两个方法,并且我试图在另一个方法上修改局部变量字符串,
def modify_test
value = 'initial stringg'
remove_last_char(value)
puts value
end
def remove_last_char(value)
value = value[0...-1]
puts value
end
remove_last_char
方法打印initial string
,但是即使调用modify_test
之后,initial stringg
方法也打印remove_last_char
。我不认为value = value[0...-1]
被引用为参数化值。
remove_last_char
方法中的值修改后,能否指向相同的值?我也遇到了this问题,并且有类似的情况,但没有重复:)
Ruby的方法使用“按引用值调用”评估策略,也称为"call by object sharing"或“按指针调用”。这意味着将评估函数调用中的参数,并传递值(作为对象引用);不是变量本身。然后将该值分配给该方法中的局部变量。此新变量与可能最初用于传递参数的变量不同,因此分配给局部变量不会影响原始变量的值。
您可以做两件事。
您可以返回新值,并信任调用方,然后将返回值分配给调用上下文中的变量:
def modify_test
value = 'initial stringg'
value = remove_last_char(value)
puts value
end
def remove_last_char(value)
value[0...-1]
end
如果字符串是可变的,则可以更改字符串的contents,而不必更改变量的分配:
def modify_test
value = 'initial stringg'
remove_last_char(value)
puts value
end
def remove_last_char(value)
value[-1..] = ''
end