Ruby 方法无法识别布尔值
我有一个接受两个参数的方法。一个值(fixnum)和一个布尔值 但是,第4行没有返回“C”,而是返回“D”。它无法识别布尔值,我不确定为什么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)
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。没有其他可以满足的“其他”。