Ruby中的独立问号有什么作用?

时间:2013-01-06 02:55:58

标签: ruby

  

可能重复:
  How do I use the conditional operator (? :) in Ruby?

我正在教自己Ruby并经历RubyMonk练习。我遇到了这个令我困惑的代码:

def calculate(*arguments)
  options = arguments[-1].is_a?(Hash) ? arguments.pop : {}
  options[:add] = true if options.empty?
  return add(*arguments) if options[:add]
  return subtract(*arguments) if options[:subtract]
end

请注意,加法和减法是添加/减去其参数的现有函数,其长度可能不同。

计算应该像这样工作

 calculate(1,2,3,4,5,add: true) => 10
 calculate(10,3,4, subtract: true) => 3

我的问题是,有人可以解释行中发生的事情:

options = arguments[-1].is_a?(Hash) ? arguments.pop : {}

即,一个独立的问号到底是做什么的?此外,冒号做了什么?

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:6)

options = arguments[-1].is_a?(Hash) ? arguments.pop : {}

是三元运算符声明的一部分。这是一种在单行上进行if条件的方法。

(condition) ? then : else.

答案 1 :(得分:3)

这是表达if-then-else的另一种方式。例如

options = arguments[-1].is_a?(Hash) ? arguments.pop : {}

完全相同
if arguments[-1].is_a?(Hash)
  options = arguments.pop
else
  options = {}
end