Ruby 如何将map与块中的多个语句一起使用

Ruby 如何将map与块中的多个语句一起使用,ruby,Ruby,我拿了一根绳子,把它分开,然后把地图连起来。我想要任何长度为5个字母或以上的单词 如果我这样做 str.split(' ').map { |word| word} 它将返回一个包含所有单词的数组 如果我这么做的话 str.split(' ').map { |word| words; word.reverse if word.length >= 5 } 我得到的只是相反的词。那我怎么能两者兼得呢 旁注-我正在努力理解如何正确使用积木,虽然我取得了一些进展,但我仍然不能完全流利地使用积木

我拿了一根绳子,把它分开,然后把地图连起来。我想要任何长度为5个字母或以上的单词

如果我这样做

str.split(' ').map { |word| word} 
它将返回一个包含所有单词的数组

如果我这么做的话

str.split(' ').map { |word| words; word.reverse if word.length >= 5 }
我得到的只是相反的词。那我怎么能两者兼得呢

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

这个怎么样

str.split.map { |word| word.length >= 5 ? word.reverse : word }
在单词上使用时,我们总是返回一个单词本身,而当它足够长时,它会在适当的位置反转


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

你能给出一个输入/输出示例吗?还有,
words
是什么?“我怎么能两者都做?”-你是什么意思,“两者都做”?输入:
p spinWords(“嘿,战友们”)#=>返回“Hey wollef sroirraw”p spinWords(“这是一个测试”)#=>返回“这是一个测试”p spinWords(“这是另一个测试”)#=>返回“这是雷托纳测试”
输出为:
[“nil”、“wollef”、“sroirraw”][“nil”、“nil”、“nil”、“nil”、“nil”、“nil”][nil”、“nil”、“rehtona nil”]
虽然此代码可能会回答问题,但提供有关此代码回答问题的原因和/或方式的附加上下文可提高其长期价值。感谢您对我的if语句的解释。此解决方案也有效。我将随时阅读。是的,行得通。我今天早些时候刚刚阅读了三元运算符,但是我不认为它是合适的。现在我知道了。太棒了!这之所以有效,是因为Ruby使用最后一条语句的结果作为块的返回值。
if
语句在一种情况下返回nils。您需要的是一个无论什么(反转或其他)都返回单词的构造,这就是三元数的作用。
str.split.map { |word| word.tap { |w| w.reverse! if w.length >= 5 } }