簡體   English   中英

為什么Ruby方法的參數值會發生莫名其妙的變化?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM