如何在块中使用带有多个语句的映射

时间:2017-07-27 10:39:41

标签: ruby

我取一个字符串并将其拆分然后将地图链接起来。我希望任何长度为5个字母或更大字母的单词都会反转。

如果我这样做

str.split(' ').map { |word| word} 

它将返回一个包含所有单词的数组。

如果我这样做

str.split(' ').map { |word| words; word.reverse if word.length >= 5 }

所有我回来的都是颠倒的话。那我怎么能两个都做?

旁注 - 我试图理解如何正确使用积木,虽然我取得了一些进展,但我仍然不能完全流利。

2 个答案:

答案 0 :(得分:6)

这个怎么样?

str.split.map { |word| word.length >= 5 ? word.reverse : word }

答案 1 :(得分:2)

str.split.map { |word| word.tap { |w| w.reverse! if w.length >= 5 } }

在单词上使用Object#tap我们总是会返回一个单词,而当它足够长时,它会被 inplace 反转。

您的方法失败,因为postfix if意味着在条件不满足时返回nil