Case 语句
当你需要根据单个变量的值采取各种不同的操作时,多个 if..elsif
测试是冗长且重复的。
case
语句提供了更简洁的替代方案。以单词 case
开始,后跟要测试的变量名称。然后是一系列 when
片段,每一片段都指定一个“触发值”(trigger),后跟要执行的代码。
仅当测试变量等于触发(trigger)值时,此代码才会执行:
case.rb
case( i )
when 1 : puts("It's Monday" )
when 2 : puts("It's Tuesday" )
when 3 : puts("It's Wednesday" )
when 4 : puts("It's Thursday" )
when 5 : puts("It's Friday" )
when (6..7) : puts( "Yippee! It's the weekend! " )
else puts( "That's not a real day!" )
end
在上面的示例中,我使用冒号将每个 when
测试与要执行的代码分隔开。与类 C 语言中的 case
语句不同,当匹配到一个片段时,不需要输入一个 break
关键字来防止继续进入后面其余的片段中匹配。在 Ruby 中,一旦匹配到,case
语句就会结束:
case( i )
when 5 : puts("It's Friday" )
puts("...nearly the weekend!")
when 6 : puts("It's Saturday!" )
# the following never executes
when 5 : puts( "It's Friday all over again!" )
end
你可以在一个 when
测试中包含多行代码,你也可以包含多个用逗号分割的值来触发同一个 when 代码块,像这样:
when 6, 7 : puts( "Yippee! It's the weekend! " )
case2.rb
case
语句中的条件不一定是一个简单的变量; 它也可以是这样的表达式:
case( i + 1 )
你还可以使用非整数(non-integer)类型,例如字符串(string)。如果在一个 when
片段中指定了多个触发值,则它们可能具有不同的类型 - 例如,包含字符串和整数:
when 1, 'Monday', 'Mon' : puts( "Yup, '#{i}' is Monday" )
这是一个较长的例子,说明了上面提到的一些语法元素:
case3.rb
case( i )
when 1 : puts("It's Monday" )
when 2 : puts("It's Tuesday" )
when 3 : puts("It's Wednesday" )
when 4 : puts("It's Thursday" )
when 5 then puts("It's Friday" )
puts("...nearly the weekend!")
when 6, 7
puts("It's Saturday!" ) if i == 6
puts("It's Sunday!" ) if i == 7
puts( "Yippee! It's the weekend! " )
# the following never executes
when 5 : puts( "It's Friday all over again!" )
else puts( "That's not a real day!" )
end