Ruby:';大小写正确';它什么时候阻止循环?
这是一段代码Ruby:';大小写正确';它什么时候阻止循环?,ruby,Ruby,这是一段代码 A = "am" F = "fm" def fmam(n) return if n == 0 loopy(n - 1) case true when n % 15 == 0 puts B + L when n % 5 == 0 puts L when n % 3 == 0 puts B
A = "am"
F = "fm"
def fmam(n)
return if n == 0
loopy(n - 1)
case true
when n % 15 == 0
puts B + L
when n % 5 == 0
puts L
when n % 3 == 0
puts B
else
puts n
end
end
fmam(20)
在这段代码中,case-true
做了什么这段代码?:-说
比较由case
指定的表达式和使用==
运算符时指定的表达式,并执行匹配的when
子句的代码
说,看看下面:
A = "am"
F = "fm"
L = "dd"
B = 'aa'
def fmam(n)
return if n == 0
case true
when n % 15 == 0
puts B + L
when n % 5 == 0 # this evaluates to true first, which then matched with true value mentioned in the case statement.
puts L
when n % 3 == 0
puts B
else
puts n
end
end
fmam(20) #=> dd
现在看下面的代码:
A = "am"
F = "fm"
L = "dd"
B = 'aa'
def fmam(n)
return if n == 0
case false
when n % 25 == 0 # this evaluates to false first, which then matched with false value mentioned in the case statement.
puts B + L
when n % 5 == 0
puts L
when n % 3 == 0
puts B
else
puts n
end
end
fmam(30) #=> aadd
案例有两种形式。您正在使用的表单使用=
运算符将案例
关键字(true
在本例中)后的“目标”与每次比较(每个当
关键字后的部分)进行比较。最后是一系列布尔表达式,并为第一个计算结果为true
的表达式执行代码。因此,它是多余的,并且有点混乱。最好删除true
并使用第二种形式的case
:
case
when n % 15 == 0
puts B + L
when n % 5 == 0
puts L
when n % 3 == 0
puts B
else
puts n
end
这做了同样的事情,但更清楚。您可以重构case语句以
msg = case 0
when n % 15
B + L
when n % 5
L
when n % 3
B
else
n
end
puts msg
msg = case 0
when n % 15
B + L
when n % 5
L
when n % 3
B
else
n
end
puts msg