我正在教自己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 : {}
即,一个独立的问号到底是做什么的?此外,冒号做了什么?
非常感谢你的帮助!
答案 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