2013-03-18 3 views
1

Я хочу написать заявление if...elsif с использованием тройного синтаксиса. Могу ли я добавить еще одну проверку для ARGV[1] внутри этого заявления?Рубиновый тернарный оператор и elsif

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

- это работает

+2

Вы имеете в виду вложенный тернарный оператор? – megas

+3

Вы можете, но нахмурились. – mcfinnigan

+0

уточните вашу потребность, пожалуйста? –

ответ

0

Не 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 
+0

Операция 'case' была бы лучше, чем' if/elsif/else/end'. –

+0

Хороший вопрос, в этом «случае» (не каламбур) Я согласен – myitcv

8

Все, что вы можете сделать с 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 
+0

спасибо, это то, что я хотел – cnav

+3

@WayneConrad теперь посмотрим, что вы сделали ... – mcfinnigan

+3

@mcfinnigan Мы можем надеяться, что опыт станет лучшим учителем чем я. –

Смежные вопросы