0

可能重复:
如何在 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 : {}

也就是说,一个独立的问号到底有什么作用?另外,结肠有什么作用?

非常感谢你的帮助!

4

2 回答 2

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

是三元运算符语句的一部分。这是一种在单行上执行 if 条件的方法。

(condition) ? then : else.
于 2013-01-06T02:57:55.250 回答
3

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

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

完全一样

if arguments[-1].is_a?(Hash)
  options = arguments.pop
else
  options = {}
end
于 2013-01-06T03:01:03.440 回答