Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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方法参数值会莫名其妙地改变?_Ruby_Variables_Methods_Arguments_Variable Assignment - Fatal编程技术网

为什么Ruby方法参数值会莫名其妙地改变?

为什么Ruby方法参数值会莫名其妙地改变?,ruby,variables,methods,arguments,variable-assignment,Ruby,Variables,Methods,Arguments,Variable Assignment,下面是一个方法的一些代码,该方法最终应该将一个加扰的单词与一个小的单词“字典”进行比较,然后返回一个未加扰的单词。请记住,这种方法是不完整的 def word_unscrambler(str, words) p words comparison = words.each_index {|i| words[i] = words[i].chars.sort.join} p words string = str.chars.join comparison.each_index do

下面是一个方法的一些代码,该方法最终应该将一个加扰的单词与一个小的单词“字典”进行比较,然后返回一个未加扰的单词。请记住,这种方法是不完整的

def word_unscrambler(str, words)
  p words
  comparison = words.each_index {|i| words[i] = words[i].chars.sort.join}
  p words
  string = str.chars.join
  comparison.each_index do |i|
    return words[i] if string == comparison[i]
  end
end
当我使用irb和参数“words”的水果列表测试该方法时,第一个“p words”输出:

第二个“p字”输出:

我感到困惑的是,数组“words”的值在“comparison”赋值语句之后发生了变化。是的,“比较”被指定给“单词”的修改,但根据我的经验,赋值语句只为赋值运算符左侧的变量赋值。 尽管这与我在时间编程中所学到的一切背道而驰,但我试图通过创建另一个具有相同值的数组来隔离“单词”,称为“复制”。通过对代码的修改,我仍然得到了带有重新分配值的“单词”。我必须缺少方法参数或变量的一些基本方面


那么,是什么导致了这种变化呢?

仔细看看你的对比=行:

comparison = words.each_index {|i| words[i] = words[i].chars.sort.join}
在each_索引块中,您正在更改数组中每个字符串的值:

words[i] = words[i].chars.sort.join
这是修改单词中的每个字符串。所以你会期望“苹果”变成“aelpp”

要构建新数组并将其分配给比较,您可能需要

这将创建一个新的数组并将其分配给比较,该数组看起来像第二条p语句的输出

comparison = words.each_index {|i| words[i] = words[i].chars.sort.join}
words[i] = words[i].chars.sort.join
comparison = words.map { |word| word.chars.sort.join }