我有这段代码
(1..50).each do |num|
case num
when num % 4 == 0, num % 6 == 0
puts 'Cluck'
when num % 4 == 0
puts 'Cluck Cluck'
when num % 5 == 0
puts 'Cluck Cluck Cluck'
else
puts num
end
end
由于一些奇怪的原因,它不是把第二线上的咯咯咯咯或第24行的咯咯,而是只是列出1到100的列表。我无法弄清楚是什么'错误的switch语句。第一个使用逗号或&&也没有改变任何东西(我不相信它应该)。
答案 0 :(得分:3)
case a
when b
测试a
是否等于b
。
在您的情况下,a
是一个数字(num
),而b
是一个布尔值(num % 4 == 0
),所以这绝不会发生。
另一个问题是
case
when b,c
测试b
或 c
。
如果您想检查num
是否可被24整除,则需要b
和 c
。
从num
移除case
并使用逻辑和(&&
):
(1..100).each do |num|
case
when num % 4 == 0 && num % 6 == 0
## or just :
# when num % 24 == 0
puts 'Cluck'
when num % 4 == 0
puts 'Cluck Cluck'
when num % 5 == 0
puts 'Cluck Cluck Cluck'
else
puts num
end
end
答案 1 :(得分:1)
哦,好吧,埃里克的回答是正确的。我只是将其添加为reference -
虽然你可以使用case语句而不给它一个匹配的值,但它不会在那里结束,这允许case语句模仿if语句的行为,例如:
print "Enter a string: "
some_string = gets.chomp
case
when some_string.match(/\d/)
puts 'String has numbers'
when some_string.match(/[a-zA-Z]/)
puts 'String has letters'
else
puts 'String has no numbers or letters'
end
答案 2 :(得分:0)
我快速阅读了this guide ,似乎您正在尝试将case
用作if
语句,但是您提供了一个值来匹配。
因为您将num
作为case
的第一个参数,所以它希望与之匹配。问题是,你的条件评估为布尔值,而num
是一个数字,因此它们永远不会匹配,而else条件将始终运行。
从num
的开头删除case
。