Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby三元算子与elsif_Ruby - Fatal编程技术网

Ruby三元算子与elsif

Ruby三元算子与elsif,ruby,Ruby,我想用三元语法编写if…elsif语句。 我是否可以在此语句中添加另一个检查ARGV[1] test-expression ? if-true-expression : if-false-expression ARGV[1] == "home" ? (installabra) : (puts menuInstall) -这很有效,但不是100%我完全理解你的问题。。。。以下是你所追求的目标吗 x = ARGV[0].to_i y = if x == 1 then "one" elsif

我想用三元语法编写
if…elsif
语句。 我是否可以在此语句中添加另一个检查
ARGV[1]

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

-这很有效,但不是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

您可以用
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

你是说嵌套的三元运算符?你可以,但不赞成。请澄清你的需要?避免使用复合/复杂的三元语句。它们在C和Perl中可能是惯用的,但在Ruby中则不是。使用
if/elsif/else/end
case
可以很容易地创建类似的结果。归根结底,它是一种可读性/维护性的东西。@mcfinnigan我们希望经验会比我更好。@cnav,我突然想到,
案例
语句可能对你所做的工作很有用。请参见上面的编辑。
case
语句比
if/elsif/else/end
更适合。