条件运算符(?:)在Ruby中使用?
例如,这是正确的吗?
<% question = question.size > 20 ? question.question.slice(0, 20)+"..." : question.question %>
条件运算符(?:)在Ruby中使用?
例如,这是正确的吗?
<% question = question.size > 20 ? question.question.slice(0, 20)+"..." : question.question %>
当前回答
puts true ? "true" : "false"
=> "true"
puts false ? "true" : "false"
=> "false"
其他回答
它是三元操作符,它的工作方式类似于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
简单的方法:
param_a = 1
param_b = 2
result = param_a === param_b ? 'Same!' : 'Not same!'
因为param_a不等于param_b,那么结果的值将不相同!
代码条件?statement_A: statement_B等价于
if condition == true
statement_A
else
statement_B
end
puts true ? "true" : "false"
=> "true"
puts false ? "true" : "false"
=> "false"
您使用ERB表明您使用的是Rails。如果是这样,那么考虑truncate,一个内置的帮助器,它将为你做这项工作:
<% question = truncate(question, :length=>30) %>