2017-08-13 9 views
0

仮定case文は三つの変数を考慮に入れマッチ以下の目標は、最初の条件一致ではなく、「結果」変数をLATEST条件に更新することです。例えばユーザーが変数age = 90、garlic_allergy = false、name = Draculaを入力する場合、case文は「おそらく吸血鬼ではない」(最初の条件が満たされている)とは対照的に「確実に吸血鬼」(最新の条件が満たされている) 。Rubyは戻るLATEST条件一致ではなく、最初の条件は、以下の

case 
    when age.to_i < 100 && garlic_allergy = false 
     result = "Probably NOT a vampire" 
    when age.to_i < 100 && garlic_allergy = true 
     result = "Maybe a vampire" 
    when age.to_i > 100 && garlic_allergy = true 
     result = "almost certainly a vampire" 
    when name = "Dracula" 
     result = "Definitely a vampire" 
    else 
     result = "Results inconclusive" 
    end 

    puts result 
    end 

これは、プログラムが通ることを確認する方法を...例の場合であるが、いずれにせよ文またはなど、複数の条件、との場合/ ELSIF/else文のためにこれを行う方法を把握しよう/ elsif文が実行されるたびに、最新の状態を返します。私はループでステートメントをラップすることによってそれをやってみたが、まだ運がなかった。

答えて

0

あなたの条件

conditions = [] 

conditions.push lambda { |name, age, garlic_allergy| 
    'Probably NOT a vampire' if age < 100 and not garlic_allergy 
} 

conditions.push lambda { |name, age, garlic_allergy| 
    'Maybe a vampire' if age < 100 and garlic_allergy 
} 

conditions.push lambda { |name, age, garlic_allergy| 
    'almost certainly a vampire' if age > 100 and garlic_allergy 
} 

conditions.push lambda { |name, age, garlic_allergy| 
    'Definitely a vampire' if name == 'Dracula' 
} 

で配列を構築し、最後にあなたの条件を減らすには、1を成功しました。

result = conditions.inject('Results inconclusive') { |current, x| 
    r = x.(name, age, garlic_allergy) 

    r != nil ? r : current 
} 

injectの初期値はいずれも条件が成功した場合に保持されますフォールバック状態、であることに注意してください。

関連する問題