带有append(<<)运算符和匹配的三元运算符

que*_*ker 0 ruby ternary-operator

所以我有以下代码行:

palinwords.select do |x| 
  x =~ /^[aeiou]/ ? testhash[:vcv] << x : testhash[:cvc] << x
end
Run Code Online (Sandbox Code Playgroud)

觉得有一种方法可以加强这个操作,使附加没有明确地写在冒号的两边.我发现很难描述我的意思,所以这里有一个例子puts而不是<<:

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

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

完全有可能我错过了一些东西或者认为这完全错了,所以如果我想做的事情是不可能的,那很好.

ssc*_*eck 8

分开你可以使用的所有palindroms group_by.

palinwords.group_by { |x| x =~ /^[aeiou]/ ? :vcv : :cvc }
Run Code Online (Sandbox Code Playgroud)


pot*_*hin 5

像这样的东西:

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

  • 难以置信.我不知道为什么,但我不认为将条件置于括号内会起作用. (2认同)
  • 元素参考的内部parens是多余的,可以简单地写出来. (2认同)