基本的にはもっと言いたいことがあります:
分岐ではif-else
、一致条件が見つかるたびに、一致した節の最後のステートメントがif-else
ブロックによって返されます。以下を検討してください。
arg = 4
p m = if (arg == 1)
"1"
elsif (arg == 3)
"3"
elsif (arg ==4)
"5";"11"
elsif
"3"
end
出力:
#11
ただし、各句との照合中に、裸のelsif
ものが見つかった場合、if-else
ブロックはその即時式の真の値をチェックし、それに応じて値を返します。
arg = "4"
p m = if (arg == "1")
47
elsif
10 ; "7"
elsif (arg =="5")
12;14
elsif
2
end
出力:
#"7"
以下のコードは、条件チェックとして使用されるnil
ため、返すもの10
は何もありません。その後、コードには何もありません。なのでnil
返されました。
arg = "4"
p m = if (arg == "1")
47
elsif
10
elsif (arg =="5")
12;14
elsif
2
end #nil
物事を最終的に明確にするために、以下の別のコード:
arg = "4"
p m = if (arg == "1")
47
elsif
nil
elsif (arg =="5")
12;14
elsif
2 ; "44"
end #44
上記のすべての例で、理由が明確であることを願っています-以下のコード出力:[1, 2, nil, nil, nil, nil, nil, nil, nil]
p (1...10).map { |i|
if (i == 1)
1
elsif (i == 2)
2
elsif
3
end
}
最初のコードに答えるには、まず以下の 2 つを見てください。
m = if puts "hi"
p "hello"
end #"hi"
"hi" は、結果として評価された句が出力されないリターンとして出力されputs
ます。しかし、以下のコードはそこで使用されているとおりに機能し、句は戻り値である で実行されました。nil
if
false
hello
p
if
p
true
m = if p "hi"
p "hello"
end
#"hi"
#"hello"
3
全体として適用された上記のすべてのロジックから、以下のコードからの出力として出力される理由を理解していただければ幸いです。
arg = 3
if (arg == 1)
puts "1"
elsif (arg == 2)
puts "2"
elsif
puts "3"
end