Ruby 方法无法识别布尔值

Ruby 方法无法识别布尔值,ruby,Ruby,我有一个接受两个参数的方法。一个值(fixnum)和一个布尔值 但是,第4行没有返回“C”,而是返回“D”。它无法识别布尔值,我不确定为什么 def grade(num_books, reads_books) if num_books < 10 return "D" elsif num_books < 10 && reads_books == true return "C" elsif num_books.between?(10, 20)

我有一个接受两个参数的方法。一个值(fixnum)和一个布尔值

但是,第4行没有返回“C”,而是返回“D”。它无法识别布尔值,我不确定为什么

def grade(num_books, reads_books)
  if num_books < 10 
    return "D"
  elsif num_books < 10 && reads_books == true
    return "C"
  elsif num_books.between?(10, 20)
    return "C"
  elsif num_books.between?(10,20) && reads_books == true
    return "B"
  elsif num_books > 20
    return "B"
  else
    return "A"
  end
end

grade(9, true)
def等级(书籍数量、阅读次数)
如果书籍数量小于10
返回“D”
elsif num_books<10&&reads_books==true
返回“C”
elsif图书数量介于(10、20)之间
返回“C”
elsif num_books.between?(10,20)&&reads_books==真
返回“B”
elsif图书数量>20本
返回“B”
其他的
返回“A”
结束
结束
等级(9,正确)

条款的顺序很重要。满足第一个条件的人获胜。您可以重新排序子句,使其足够健壮:

def grade(num_books, reads_books)
  if num_books < 10 && reads_books == true
    return "C"
  elsif num_books.between?(10,20) && reads_books == true
    return "B"
  elsif num_books < 10 
    return "D"
  elsif num_books.between?(10, 20)
    return "C"
  elsif num_books > 20
    return "B"
  else
    return "A"
  end
end

grade(9, true)

条款的顺序很重要。满足第一个条件的人获胜。您可以重新排序子句,使其足够健壮:

def grade(num_books, reads_books)
  if num_books < 10 && reads_books == true
    return "C"
  elsif num_books.between?(10,20) && reads_books == true
    return "B"
  elsif num_books < 10 
    return "D"
  elsif num_books.between?(10, 20)
    return "C"
  elsif num_books > 20
    return "B"
  else
    return "A"
  end
end

grade(9, true)

它返回
“D”
,因为它通过了条件
如果num\u books<10
,它返回
“D”
,因为它通过了条件
如果num\u books<10
,我认为
elsif num\u books<10
应该作为第二个条件子句。UPD:现在我怀疑这是否重要。UPD2:我再次认为它应该超越
elsif num_books.between?(10,20)&&reads_books==true
,因为它看起来更符合逻辑:d正确的答案是:
elsif
应该在ruby中避免:)是的,一般来说,当然应该避免:)这肯定会使我上面的思考毫无意义。这些方法是不同的。如果
num\u books
大于20,第一个总是返回
“B”
,而第二个总是返回
“B”
“A”
,具体取决于在这种情况下
读取的图书数。事实上,无法访问原始方法的
else
“A”
。所以这很可能是您修复的另一个bug;-)我认为
elsif num_books<10
应该作为第二个条件从句。UPD:现在我怀疑这是否重要。UPD2:我再次认为它应该超越
elsif num_books.between?(10,20)&&reads_books==true
,因为它看起来更符合逻辑:d正确的答案是:
elsif
应该在ruby中避免:)是的,一般来说,当然应该避免:)这肯定会使我上面的思考毫无意义。这些方法是不同的。如果
num\u books
大于20,第一个总是返回
“B”
,而第二个总是返回
“B”
“A”
,具体取决于在这种情况下
读取的图书数。事实上,无法访问原始方法的
else
“A”
。所以这很可能是您修复的另一个bug;-)计算分数的规则是什么?特别是,无法达到“A”级,因为
num_books
要么低于10,要么介于10和20之间,要么高于20。没有其他可以满足的条件。计算分数的规则是什么?特别是,无法达到“A”级,因为
num_books
要么低于10,要么介于10和20之间,要么高于20。没有其他可以满足的“其他”。