gpt4 book ai didi

Ruby:为什么我的方法是非破坏性的?

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

我正在尝试创建两种方法,其中一种会破坏性地将“i”添加到任何字符串,而另一种会以非破坏性方式执行相同的操作。

def add_i(string)
new_string = string + "i"
end

def add_i!(string)
string = string + "i"
end

我的问题是:

  1. 这两种方法都是非破坏性的,即使我没有用新变量替换第二种方法中的参数。为什么?

  2. 一般来说,如何将非破坏性方法转换为破坏性方法,反之亦然?

最佳答案

答案在于变量的范围和方法/运算符的行为。 add_i! 中的左侧(= 左侧)string 与传入的string 不同(右侧 string 和方法参数)。旧字符串继续存在,但字符串 var 指向新字符串。

要使第二种方法“具有破坏性”,您可以这样做:

def add!(string)
string << "i"
end

根据经验,您需要了解您所应用的方法/运算符是对数据本身进行操作还是返回数据的副本(例如楼上的“+”返回副本)

处理字符串并确保不破坏数据的一种简单方法是对传入的任何内容使用 dup(),然后对副本进行操作。

关于Ruby:为什么我的方法是非破坏性的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33378786/

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