2

if...elsif三項構文を使用してステートメントを書きたい。ARGV[1]このステートメント内に別のチェックを追加できますか?

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

- これは機能します

4

2 に答える 2

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 ステートメントが優れています。

case ARGV[1]
when 'home'
  installabra
when 'away'
  goaway
else
  puts menuInstall
end
于 2013-03-18T14:01:06.383 に答える
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}"

これは 3 項構文を超えていますが、柔軟性が向上します。

出力:

$ ruby test.rb 2
x = 2, y = two
于 2013-03-18T13:59:21.130 に答える