如何在ruby中修改字符串值?

问题描述 投票:0回答:1

我在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]被引用为参数化值。

  1. remove_last_char方法中的值修改后,能否指向相同的值?
  2. 是否有其他方法可以解决这种情况?

我也遇到了this问题,并且有类似的情况,但没有重复:)

ruby string
1个回答
0
投票

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
    
© www.soinside.com 2019 - 2024. All rights reserved.