[英]Why is Ruby method argument value inexplicably changed?
這是方法的一些代碼,該方法應該最終將加擾的單詞與單詞的小“字典”進行比較,然后將未加擾的單詞返回。 請記住,此方法是不完整的。
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”輸出:
["apple", "orange", "pineapple"]
第二個“ p字”輸出:
["aelpp", "aegnor", "aeeilnppp"]
我感到困惑的是,在“比較”的賦值語句之后更改了數組“單詞”的值。 是的,“比較”被分配給“單詞”的修改,但是以我的經驗,賦值語句僅將值賦給賦值運算符左側的變量。 即使這與我在時間編程中學到的一切都背道而馳,我還是試圖通過創建另一個具有相同值的數組(稱為“復制”)來隔離“單詞”。 通過對代碼的這種修改,我仍然最終得到帶有重新分配值的“單詞”。 我必須缺少方法參數或變量的一些基本方面。
那么,是什么導致了變化呢?
仔細看一下您的比較=行:
comparison = words.each_index {|i| words[i] = words[i].chars.sort.join}
在each_index塊內,您正在更改數組中每個字符串的值:
words[i] = words[i].chars.sort.join
這是在單詞中修改每個字符串。 因此,您希望“蘋果”成為“ aelpp”
要構建一個新數組並將其分配給比較,您可能需要看一下map方法 。
comparison = words.map { |word| word.chars.sort.join }
這將創建一個新數組並將其分配給比較,該數組看起來像第二個p語句的輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.