Ruby基础教程5.6 case 语句_Ruby基础教程5.6 case 语句试读-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > Ruby基础教程 > 5.6 case 语句

Ruby基础教程——5.6 case 语句

条件有多个时,使用 if 与 elsif 的组合虽然也能达到判断多个条件的效果,但是如果需 要比较的对象只有一个,根据这个对象值的不同,执行不同的处理时,使用 case 语句会使程序 更简单,更便于理解。 case 语句的用法如下: case 比较对象 when 值 1 then 处理 1 when 值 2 then 处理 2 when 值 3 then 处理 3 else 处理 4 end ※ 可以省略 then 本例的比较对象的值有 3 个,但根据实际情况可以 无限增加下去。 还有,when 可以一次指定多个值。下面的示例(代码清单 5.4)从数组 tags 的开头依次取出元素,判断元素值,输出相应的结果。 代码清单 5.4  case.rb tags = [ "A", "IMG", "PRE" ] tags.each do |tagname| case tagname when "P","A","I","B","BLOCKQUOTE" puts "#{tagname} has child." when "IMG", "BR" puts "#{tagname} has no child." else puts "#{tagname} cannot be used." end end 执行示例 > ruby case.rb A has child. IMG has no child. PRE cannot be used. 我们再来看看其他例子。 代码清单5.5  case_class.rb array = [ "a", 1, nil ] array.each do |item| case item when String puts "item is a String." when Numeric puts "item is a Numeric." else puts "item is something." end end 执行示例 > ruby case_class.rb item is a String. item is a Numeric. item is something. 在本例中,程序判断传过来的对象类型是字符串(String 类)还是数值( Numeric 类), 或者均不是以上两者,然后再输出相应的结果。 在这里,我们同样是使用 case 语句,不过判断的主体与之前的例子有点区别。本例中 的 when 实际并不是直接判断传过来的字符串,而是先查找该对象属于哪个类,然后再根据这个 类的信息来进行条件判断。 我们还可以根据正则表达式的匹配结果进行不同处理。下面是使用正则表达式做判断 的 case 语句的例子。 text.each_line do |line| case line when /^From:/i puts " 发现寄信人信息 " when /^To:/i puts " 发现收信人信息 " when /^Subject:/i puts " 发现主题信息 " when /^$/ puts " 头部解析完毕 " exit else ## 跳出处理 end end 这是一个解析电子邮件头部的程序。为了简化程序,我们并没有考虑有多个头部的情况,而 且电子邮件里的内容我们也没取出来。在这里,大家掌握程序的大概的处理流程就可以了。 each_line 方法逐行读取电子邮件正文数据 text,并将每行的内容赋值给变量 line。这 个是处理文件、文本数据时的典型的写法。 接着 case 语句判断得到的字符串的内容,执行不同的处理。以 From: 开头时输出“发现寄 信人信息”,以 To: 开头时输出“发现收信人信息”,以 Subject: 开头时输出“发现主题信息”。 最后的 when 判断的 / ^$ /,表示行的开头后马上就接着是行尾的意思 A,也就是说,这是表示空 行的正则表达式。电子邮件的头部和正文间一定会以空行作间隔,因此根据这个规则我们就可以 把空行作为头部结束的标志。当 when 遇到空行,输出“头部解析完毕”的信息后调用 exit 方 法,结束程序。 ------------------------------------ A  在正则表达式中,^表示匹配字符串的开始,$表示匹配字符串的结束。——译者注 ------------------------------------ 专栏 === 与 case 语句 在 case 语句中,when 判断值是否相等时,实际是使用 = = = 运算符来判断的。左边是 数值或者字符串时,= = = 与 = = 的意义是一样的,除此以外,= = = 还可以与 =~ 一样用来判 断正则表达式是否匹配,或者判断右边的对象是否属于左边的类,等等。对比单纯的判断两 边的值是否相等,= = = 能表达更加广义的“相等”。 p (/zz/ === "xyzzy") #=> true p (String === "xyzzy") #=> true p ((1..3) === 2) #=> true 用 if 语句改写 case 语句的程序如下所示。请注意 when 指定的对象在 = == 的左边。 case value if A === value when A 处理 1 处理 1 elsif B === value when B 处理 2 处理 2 else else 处理 3 处理 3 end End

展开全文

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

《Ruby基础教程》其他试读目录

• 4.1 对象
• 4.2 类
• 4.3 变量
• 4.4 常量
• 4.5 保留字
• 4.6 多重赋值
• 5.1 什么是条件判断
• 5.2 Ruby 中的条件
• 5.3 逻辑运算符
• 5.4 if 语句
• 5.5 unless 语句
• 5.6 case 语句 [当前]
• 5.7 if 修饰符与 unless 修饰符
• 5.8 总结