Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于Ruby Gsub_Ruby_String_Gsub - Fatal编程技术网

关于Ruby Gsub

关于Ruby Gsub,ruby,string,gsub,Ruby,String,Gsub,我不明白,谁能解释一下为什么参数[:hello]会被gsub修改?我希望修改hello字符串,但不是params散列。如果不希望修改,则需要克隆它,如: params[:hello] # => "Some params value" hello = params[:hello] hello.gsub!("whatever","") params[:hello] # => "" 按照您现在的操作方式,您有一个对它的引用,而不是副本。如果您不想修改它,您需要克隆它,如: param

我不明白,谁能解释一下为什么参数[:hello]会被gsub修改?我希望修改hello字符串,但不是params散列。

如果不希望修改,则需要克隆它,如:

params[:hello] # => "Some params value"

hello = params[:hello]
hello.gsub!("whatever","")

params[:hello] # => ""

按照您现在的操作方式,您有一个对它的引用,而不是副本。

如果您不想修改它,您需要克隆它,如:

params[:hello] # => "Some params value"

hello = params[:hello]
hello.gsub!("whatever","")

params[:hello] # => ""
按照现在的操作方式,您有对它的引用,而不是副本。

hello和params[:hello]是对同一字符串的引用。在ruby中,正如在java和python中一样,赋值并不复制值,它只是在赋值给变量中存储对相同值的另一个引用。因此,除非在使用dup修改字符串之前显式复制该字符串,否则对该字符串的任何更改都将影响对该字符串的所有其他引用。

hello和params[:hello]是对同一字符串的引用。在ruby中,正如在java和python中一样,赋值并不复制值,它只是在赋值给变量中存储对相同值的另一个引用。因此,除非在使用dup修改字符串之前显式复制该字符串,否则对该字符串的任何更改都将影响对该字符串的所有其他引用。

有两个版本的StringSub可用

hello = params[:hello].clone
Stringsub!修改原始字符串并返回对其的引用。 StringSub不会修改原件,而是在副本上进行替换

命名使用!修改对象的方法是一种常见的ruby习惯用法

有两个版本的StringSub可用

hello = params[:hello].clone
Stringsub!修改原始字符串并返回对其的引用。 StringSub不会修改原件,而是在副本上进行替换

命名使用!修改对象的方法是一种常见的ruby习惯用法