Ruby三元运算符和elsif

时间:2013-03-18 13:44:42

标签: ruby

我想使用三元语法编写if...elsif语句。 我可以在此声明中添加ARGV[1]的其他检查吗?

test-expression ? if-true-expression : if-false-expression
ARGV[1] == "home" ? (installabra) : (puts menuInstall)

- 这有效

2 个答案:

答案 0 :(得分:10)

您可以使用if...elsif...else...end

执行的任何操作
if cond1
  stmt1
elsif cond2
  stmt2
elseif cond3
  stmt3
else
  stmt4
end

你可以使用嵌套的三元运算符:

cond1 ? stmt1 : (cond2 ? stmt2 : (cond3 ? stmt3 : stmt4)))

或更清晰,省略括号:

cond1 ? stmt1 : cond2 ? stmt2 : cond3 ? stmt3 : stmt4

但请考虑哪些代码更清晰,更易于维护。

在您的问题中,您询问是否可以在嵌套条件中对ARGV[1]进行另一项测试。如果您的条件总是测试ARGV[1]是否相等,那么案例陈述是优越的:

case ARGV[1]
when 'home'
  installabra
when 'away'
  goaway
else
  puts menuInstall
end

答案 1 :(得分:1)

不是100%我完全理解你的问题....以下是否实现了你的目标?

x = ARGV[0].to_i
y = if x == 1 then "one"
    elsif x == 2 then "two"
    else "unknown"
    end

puts "x = #{x}, y = #{y}"

这超出了三元语法,但为您提供了更大的灵活性。

输出:

$ ruby test.rb 2
x = 2, y = two