【问题标题】:Ternary operator with append (<<) operator and match带有附加 (<<) 运算符和匹配的三元运算符
【发布时间】:2016-02-12 14:19:37
【问题描述】:

所以我有以下代码行:

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

感觉有一种方法可以加强这个操作,使得附加不会明确地写在冒号的两边。我发现很难描述我的意思,所以这里有一个涉及puts 而不是&lt;&lt; 的示例:

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

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

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

【问题讨论】:

  • 也许是key = x =~ /^[aeiou]/ ? :vcv : :cvc; testhash[key] &lt;&lt; xselect 是干什么用的?
  • n.b.对于现在正在阅读本文的任何人 - 上面的代码 不是 我拥有的代码(如果你想看到它,它在原始帖子中可见 - 在功能上与现在的内容没有什么不同),它已被更改由某人进行编辑。
  • @question_asker:编辑可能对某些人有所帮助。如果您介意,可以点击edited ... agoclick on rollback to restore your original post
  • @user 不,没关系 - 我只是觉得在不影响功能的情况下进行语法编辑有点奇怪。

标签: ruby ternary-operator


【解决方案1】:

类似这样的:

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

【讨论】:

  • 难以置信。我不知道为什么,但我认为将条件放在括号内是行不通的。
  • 元素引用的内部括号是多余的,可以简单地编写。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    这里还有另一种方法:

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

    【讨论】:

      猜你喜欢
      • 2016-07-05
      • 2013-06-28
      • 1970-01-01
      • 1970-01-01
      • 2023-02-03
      • 1970-01-01
      • 2020-01-10
      • 2021-08-01
      • 1970-01-01
      相关资源
      最近更新 更多