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