条件运算符(?:)在Ruby中使用?

例如,这是正确的吗?

<% question = question.size > 20 ? question.question.slice(0, 20)+"..." : question.question %>

当前回答

代码条件?statement_A: statement_B等价于

if condition == true
  statement_A
else
  statement_B
end

其他回答

一个简单的例子,操作员检查玩家的id是否为1,并根据结果设置敌人id

player_id=1
....
player_id==1? enemy_id=2 : enemy_id=1
# => enemy=2

我发现了一个关于这个话题的帖子,看起来很有帮助。

您使用ERB表明您使用的是Rails。如果是这样,那么考虑truncate,一个内置的帮助器,它将为你做这项工作:

<% question = truncate(question, :length=>30) %>

它是三元操作符,它的工作方式类似于C语言(不需要括号)。这种表达方式是这样的:

if_this_is_a_true_value ? then_the_result_is_this : else_it_is_this

但是,在Ruby中,if也是一个表达式,所以:if a then b else c end === a ?B: c,除了优先级问题。两者都是表达式。

例子:

puts (if 1 then 2 else 3 end) # => 2

puts 1 ? 2 : 3                # => 2

x = if 1 then 2 else 3 end
puts x                        # => 2

请注意,在第一种情况下,圆括号是必需的(否则Ruby会感到困惑,因为它认为它是在if 1后面加上一些额外的垃圾),但在最后一种情况下,圆括号不是必需的,因为没有出现上述问题。

你可以在多行中使用"long-if"形式来提高可读性:

question = if question.size > 20 then
  question.slice(0, 20) + "..."
else 
  question
end

代码条件?statement_A: statement_B等价于

if condition == true
  statement_A
else
  statement_B
end
puts true ? "true" : "false"
=> "true"


puts false ? "true" : "false"
=> "false"