具有追加(<<<<<<&}运算符和匹配的三元运算符

时间:2015-11-11 13:22:33

标签: ruby ternary-operator

所以我有以下代码行:

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

我完全有可能错过某些东西或者认为这完全错了,所以如果我想要做的事情是不可能的,那就没问题了。

3 个答案:

答案 0 :(得分:8)

要拆分所有可以使用的group_by

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

答案 1 :(得分:5)

这样的事情:

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

答案 2 :(得分:1)

以下是另一种方法:

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