【问题标题】:Why does the Ruby ternary operator not allow extending and similar? [duplicate]为什么 Ruby 三元运算符不允许扩展和类似? [复制]
【发布时间】:2014-10-09 07:27:41
【问题描述】:

我有两段代码,就我对 Ruby 的理解而言,它们的功能应该相同。两者都将位于同一个初始化方法中:

class TicTacToePlayer
  def initialize(player_type = { human: true })
    # Here
  end
end

第一个代码是标准的 if/else 语句:

if player_type[:human]
  extend Human
else
  extend Joshua
end

第二个就是上面作为三元运算符的:

player_type[:human] ? extend Human : extend Joshua

...

我希望两者功能相同,但第一个运行顺利,第二个返回以下错误:

语法错误,意外的 tCONSTANT,需要关键字_do 或 '{' 或 '(' ...yer_type[:human] ? extend Human : extend Joshua # 三元运算...

为什么不一样?

【问题讨论】:

    标签: ruby module ternary-operator


    【解决方案1】:

    对函数调用使用括号

    player_type[:human] ? extend(Human) : extend(Joshua)
    

    【讨论】:

      【解决方案2】:

      除了像@mtm's answer这样使用括号,你也可以这样写:

      extend player_type[:human] ? Human : Joshua
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-22
        • 2018-03-16
        • 2020-11-03
        • 2010-09-10
        • 2014-09-14
        • 2013-09-17
        • 2021-12-08
        • 2019-02-08
        相关资源
        最近更新 更多