Ruby:'case true'什么时候阻止循环?

时间:2013-04-15 20:11:42

标签: 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
        else
            puts n
        end
    end
    fmam(20)

在此代码中case true执行此代码的内容是什么?

3 个答案:

答案 0 :(得分:6)

case有两种形式。您使用的表单会将case关键字(在本例中为true)后的“目标”与每个比较(每个when关键字后面的部分)使用{{1}进行比较运算符。最后得到一系列布尔表达式,并执行第一个计算结果为===的代码。因此,它是多余的,有点令人困惑。最好删除true并使用第二种形式的true

case

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

答案 1 :(得分: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

现在看下面的代码:

{{1}}

答案 2 :(得分:0)

您可以将案例陈述重构为

msg = case 0
when n % 15
  B + L
when n % 5
  L
when n % 3
  B
else
  n
end
puts msg