为什么Ruby三元运算符不允许扩展和类似?

时间:2014-08-15 14:40:37

标签: ruby module ternary-operator

我有两位代码,据我所知,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,期待keyword_do或' {'或者'('   ... yer_type [:human]?延伸人类:延伸约书亚#ternary op ...

为什么会有差异?

2 个答案:

答案 0 :(得分:1)

使用括号进行函数调用

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

答案 1 :(得分:1)

作为使用像@ mtm的答案这样的括号的替代方法,你也可以这样写:

extend player_type[:human] ? Human : Joshua