这个Ruby块如何在Eloquent Ruby中运行?

时间:2013-07-19 17:02:15

标签: ruby enumeration

我知道您可以使用yield将变量传递给Ruby代码块 但是,我对yield在这里所做的事情感到很遗憾。我知道有一些“开始” 事情还在继续。

def each_word
    words = %w(fuing wtrds iiha)
    words.each { | word | yield(word)  }
end

2 个答案:

答案 0 :(得分:2)

您的代码将遍历%w(fuing wtrds iiha)中的所有字词(即"fuing", "wtrds", "iiha"),然后yield将每个字传递到传递给each_word方法的块。例如,如果你这样调用方法:

each_word do | word |
    puts word
end

这会将每个单词打印到控制台;输出将是

fuing
wtrds
iiha

在我看来,代码最好写成:

words = %w(fuing wtrds iiha)
words.each do | word |
    puts word
end

因为这将产生完全相同的效果。

答案 1 :(得分:-4)

传递一个区块。

1

each_word{|w| puts "**#{w}**"}

输出

**fuing**
**wtrds**
**iiha**

2

each_word{|w| puts w.capitalize}

输出

Fuing
Wtrds
Iiha