Ruby程序传入参数时case代码块无法正常执行问题
问题原因
你代码中的case语句写法不符合Ruby的语法规则:
- 当
case关键字后跟随具体值(这里是number.to_i)时,Ruby会用===运算符依次比较该值和每个when后面的表达式返回结果 - 你在
when后写的number > 1、number < 2这类表达式返回的是布尔值,整数和布尔值做===比较永远返回假,因此所有when分支都不会触发
修复方案
有两种常见的修复方式,你可以按需选择:
方式1:改用条件分支写法的case
直接去掉case后跟随的number.to_i,此时case的作用等价于if-elsif结构,注意要把更具体的判断条件放在前面避免分支被拦截:
def read_album(music_file, number) puts number case when(number == 3) puts "none of this inside case is working" when(number > 1) puts "done" when(number < 2) puts "something" end end
方式2:使用值匹配的标准case写法
保留case后跟随的数值,when后直接写要匹配的数值或范围,这是Ruby更推荐的case用法,可读性更高:
def read_album(music_file, number) num = number.to_i puts num case num when 3 puts "none of this inside case is working" when 2.. # Ruby 2.6+支持无上限范围写法,低版本可以写2..Float::INFINITY puts "done" when ..1 # 同理低版本写-Float::INFINITY..1 puts "something" end end
内容的提问来源于stack exchange,提问作者Theo1290
相关产品推荐
相关产品推荐

