带有追加 (<<) 运算符和匹配项的三元运算符

Ternary operator with append (<<) operator and match

所以我有下面这行代码:

palinwords.select do |x| 
  x =~ /^[aeiou]/ ? testhash[:vcv] << x : testhash[:cvc] << x
end

觉得有一种方法可以加强这个操作,这样追加就不会明确地写在冒号的两边。我发现很难描述我的意思,所以这里有一个涉及 puts 而不是 <<:

的例子

我拥有的类似于 x == 5 ? puts y : puts z

我想要的更像 puts (x == 5) ? y : z

我完全有可能遗漏了某些东西或完全错误地考虑了这个问题,所以如果我尝试做的事情不可能实现,那也没关系。

像这样:

palinwords.each{ |x| testhash[(x =~ /^[aeiou]/ ? :vcv : :cvc)] << x }

要拆分所有回文,您可以使用 group_by

palinwords.group_by { |x| x =~ /^[aeiou]/ ? :vcv : :cvc }

还有一种方法可以做到这一点:

testhash[:vcv], testhash[:cvc] = palinwords.partition { |x| x =~ /^[aeiou]/ }