簡體   English   中英

遍歷哈希-Ruby

[英]Iterating over the Hash - Ruby

這是下面的正確答案,但是我不明白為什么在最后一行中鍵入“ puts word”是可以的,但是鍵入“ puts x”是不可接受的,因為它的定義幾乎完全相同

puts "Text please "
text = gets.chomp

words = text.split(" ")
frequencies = Hash.new{0}

words.each { |word| frequencies[word] += 1}

frequencies = frequencies.sort_by { |x, y| y }
frequencies.reverse!
frequencies.each do |word, frequency|
    puts word + " " + frequency.to_s
end

它以與代碼塊參數相同的方式定義,但位置不同 代碼塊可以使用作為參數提供的變量或在其內部定義的變量,因此puts word是可以的,也可以在父范圍內使用(創建塊的代碼-在這種情況下為“頂層”),因此puts frequencies也可以。

但是, x來自完全不同的代碼塊,因此底部的代碼塊對此一無所知。 x僅在傳遞給frequencies.sort_by的塊內具有含義。

它的定義方式不同。

x在頻率的sort_by塊中定義。

在那里沒有定義。

如果您改用它,它將起作用:

frequencies.each do |x, y|
    puts x + " " + y.to_s
end

例如,但是x和y不在{}之外定義,在這種情況下,請...結束

我認為您對占位符的范圍感到困惑。 在最后一行使用|word,frequency| 作為frequencies.each do |word, frequency|的占位符。 frequencies.each do |word, frequency| ,而您的|x,y| 的范圍是您的第each frequencies = frequencies.sort_by { |x, y| y } frequencies = frequencies.sort_by { |x, y| y }

順便說一句,也許最好是重命名|x, y| 特定的東西? 如果您沒有正確定義變量,方法,占位符等,您可能會迷失在代碼中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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