在Ruby中,独立问号的作用是什么?

在Ruby中,独立问号的作用是什么?,ruby,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 o

可能重复:

我正在自学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
请注意,add和subtract是对其参数进行加法/减法的现有函数,其长度可能会有所不同

计算应该是这样工作的

 calculate(1,2,3,4,5,add: true) => 10
 calculate(10,3,4, subtract: true) => 3
我的问题是,有人能解释一下这一行发生了什么:

options = arguments[-1].is_a?(Hash) ? arguments.pop : {}
也就是说,一个独立的问号到底做什么?还有,冒号是做什么的

非常感谢你的帮助

options = arguments[-1].is_a?(Hash) ? arguments.pop : {}
是三元运算符语句的一部分。这是一种在单行上执行if条件的方法

(condition) ? then : else.

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

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

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

这是三元运算符的一部分。请看这里:在三元运算符下。谢谢,这很有意义。这也是一个有用的评论。谢谢