2

有一段代码

 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 做什么的?

4

3 回答 3

9

case有两种形式。您使用的表单使用运算符将case​​关键字(true在本例中)之后的“目标”与每次比较(每个when关键字之后的部分)进行比较===。您最终得到一系列布尔表达式,并为第一个计算结果为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

这做同样的事情,但更清楚。

于 2013-04-15T20:29:03.390 回答
3

tutorialspoint:- 说

case expression
[when expression [, expression ...] [then]
   code ]...
[else
   code ]
end

比较使用操作符时expression指定的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
于 2013-04-15T20:17:13.177 回答
0

您可以将 case 语句重构为

msg = case 0
when n % 15
  B + L
when n % 5
  L
when n % 3
  B
else
  n
end
puts msg
于 2013-04-15T21:31:53.287 回答