基本上还有很多话要说:
在分支中,只要找到任何匹配条件,块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
}
要回答您的第一个代码,请先查看以下两个代码:
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