具有真值的案例陈述

Alv*_*nço 1 ruby typeerror

两个类似的脚本在这里显示非常奇怪的行为.

A)下面的代码是nil can't be coerced into Fixnum (TypeError):

    score = 0
    ammount = 4

    score += case ammount
      when ammount >= 3; 10
      when ammount < 3; 1
    end

    puts score
Run Code Online (Sandbox Code Playgroud)

B)另一个是放入1控制台日志.

    score = 0
    ammount = 4

    score += case ammount
      when ammount >= 3; 10
      else 1
    end

    puts score
Run Code Online (Sandbox Code Playgroud)

我希望这两个脚本都输出10到控制台上.我错了吗?为什么?

Zac*_*emp 5

给定参数时,case语句检查对象是否相等(与调用相同===),可以使用单个值或超出范围.在你的情况下,你并没有真正检查是否相等,但可以像这样写:

score += case
         when amount >= 3 then 10
         when amount < 3 then 1
         end
Run Code Online (Sandbox Code Playgroud)

但是,对于您正在尝试做的事情(一种/或条件),这非常冗长.使用普通if...else或三元语句更简单:

score += amount >= 3 ? 10 : 1
Run Code Online (Sandbox Code Playgroud)