Ruby 中的独立问号有啥作用? [复制]

Posted

技术标签:

【中文标题】Ruby 中的独立问号有啥作用? [复制]【英文标题】:What does a stand-alone question mark do in Ruby? [duplicate]Ruby 中的独立问号有什么作用? [复制] 【发布时间】:2012-12-20 04:07:26 【问题描述】:

可能重复: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 : 

也就是说,一个独立的问号到底有什么作用?还有,冒号有什么作用?

非常感谢您的帮助!

【问题讨论】:

它是三元运算符的一部分。见这里:tutorialspoint.com/ruby/ruby_operators.htm 在三元运算符下。 【参考方案1】:

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

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

完全一样

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

【讨论】:

这也是一个有用的评论。谢谢。【参考方案2】:
options = arguments[-1].is_a?(Hash) ? arguments.pop : 

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

(condition) ? then : else.

【讨论】:

谢谢,这很有道理。

以上是关于Ruby 中的独立问号有啥作用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Ruby问号运算符,这是啥意思? [复制]

一元问号 (?) 运算符有啥作用?

$User?.name中问号有啥意义

为啥问号在 %% 内不起作用? [复制]

“类型”是啥意思,ECMA 6 中的问号有啥特殊用途吗?

这些代码中的问号是啥意思? [复制]