未定义的方法'<'为true:TrueClass(NoMethodError)

时间:2019-08-14 06:04:47

标签: ruby class

我刚开始学习Ruby,并且在做开关案例问题时遇到了此错误。

puts "Enter your percentage"
pr = gets.to_i
case pr
    when (pr < 40)
        puts "He gets a D"
    when (pr >= 40 & pr < 60)
        puts "He gets a C"
    when (pr >=60 & pr<80)
        puts "He gets a B"
    when (pr >= 80)
        puts "He gets an A"
    else
        puts "he gets an A"
end

当我输入85时,出现该错误。谁能建议我做些改变。

2 个答案:

答案 0 :(得分:0)

您的错误声音会给您答案。

undefined method<,因此您的价值在您的第一种情况下。看来您的价值是boolean等于true

答案 1 :(得分:0)

我不明白您为什么使用&而不是&&来进行操作,但是在这种情况下,运算符优先级会杀死您。虽然

 a > b && c < d

被解释为

(a > b) && (c < d)

表达式

a > b & c < d

被视为

(a > (b & c)) < d

这意味着:

  • 首先计算b和c的二进制(在您的情况下这已经没有多大意义了),并得出一些整数。
  • 看到小麦a大于此值,则产生布尔值。
  • 请参阅Wheather,此布尔值大于d,这会产生异常。

看看Ruby的the operator precedence table