Я написал свой собственный итератор для класса, над которым я работаю, который расширяет hash
.
Итератор, который я написал, был реализован с использованием блоков, и теперь я пытаюсь добиться того же, используя Proc
. но я вроде не знаю, как использовать это в этом контексте! : (
def each_word
rank=0
self.sort_by{|k,v| v}.reverse.to_h.keys.each{ |key,abs, rel | yield rank+=1,
key,self[key], self.frequency(key) if block_given? }#iterate with aid block
end
и я бы использовал его так:
puts "Rang - Anzahl - Häufigkeit(%) - Wort"
obj1.each_word do |rank,word,abs ,rel|
puts "#{rank} #{abs} #{rel}% #{word} "
end
используя Pro c (не правильный код)
проблема в том, что я хочу использовать тот же код, используя Proc
def each_letter
rank=0
x=self.sort_by{|k,v| v}.reverse.to_h# this wont work but wrote it as helpless try
my_proc=Proc new { |key,abs, rel | yield rank+=1, key,x[key], x.frequency(key) }
my_proc.call()
end
Я уже просмотрел эти страницы
и что правильный способ использования предоставленного блока с использованием букв?!
Редактировать текст назначения:
each_word
перебирать слова, найденные с использованием метода и блока, начиная с наиболее распространенное слово к наименее распространенному слову. Блок получает слово, пройденную абсолютную и относительную частоту (что, я полагаю, я сделал правильно)
Буква статика each_letter
Она ведет себя аналогично each_word
, но в рамках метода вы должны использовать Proc
вместо block
.