Case 语句

当你需要根据单个变量的值采取各种不同的操作时,多个 if..elsif 测试是冗长且重复的。

case 语句提供了更简洁的替代方案。以单词 case 开始,后跟要测试的变量名称。然后是一系列 when 片段,每一片段都指定一个“触发值”(trigger),后跟要执行的代码。

仅当测试变量等于触发(trigger)值时,此代码才会执行:

case.rb
  1. case( i )
  2. when 1 : puts("It's Monday" )
  3. when 2 : puts("It's Tuesday" )
  4. when 3 : puts("It's Wednesday" )
  5. when 4 : puts("It's Thursday" )
  6. when 5 : puts("It's Friday" )
  7. when (6..7) : puts( "Yippee! It's the weekend! " )
  8. else puts( "That's not a real day!" )
  9. end

在上面的示例中,我使用冒号将每个 when 测试与要执行的代码分隔开。与类 C 语言中的 case 语句不同,当匹配到一个片段时,不需要输入一个 break 关键字来防止继续进入后面其余的片段中匹配。在 Ruby 中,一旦匹配到,case 语句就会结束:

  1. case( i )
  2. when 5 : puts("It's Friday" )
  3. puts("...nearly the weekend!")
  4. when 6 : puts("It's Saturday!" )
  5. # the following never executes
  6. when 5 : puts( "It's Friday all over again!" )
  7. end

你可以在一个 when 测试中包含多行代码,你也可以包含多个用逗号分割的值来触发同一个 when 代码块,像这样:

  1. when 6, 7 : puts( "Yippee! It's the weekend! " )
case2.rb

case 语句中的条件不一定是一个简单的变量; 它也可以是这样的表达式:

  1. case( i + 1 )

你还可以使用非整数(non-integer)类型,例如字符串(string)。如果在一个 when 片段中指定了多个触发值,则它们可能具有不同的类型 - 例如,包含字符串和整数:

  1. when 1, 'Monday', 'Mon' : puts( "Yup, '#{i}' is Monday" )

这是一个较长的例子,说明了上面提到的一些语法元素:

case3.rb
  1. case( i )
  2. when 1 : puts("It's Monday" )
  3. when 2 : puts("It's Tuesday" )
  4. when 3 : puts("It's Wednesday" )
  5. when 4 : puts("It's Thursday" )
  6. when 5 then puts("It's Friday" )
  7. puts("...nearly the weekend!")
  8. when 6, 7
  9. puts("It's Saturday!" ) if i == 6
  10. puts("It's Sunday!" ) if i == 7
  11. puts( "Yippee! It's the weekend! " )
  12. # the following never executes
  13. when 5 : puts( "It's Friday all over again!" )
  14. else puts( "That's not a real day!" )
  15. end