name = case x when 1; "one" when 2; "two" when 3; "three" else "many" end
在这种形式的case语句中,ruby会对case后跟的语句进行一次求职,接着按出现的先后顺序逐一和when语句所跟的表达式比较。如果找到匹配项则执行相应操作并返回,否则执行else块的语句并退出。
前边说的这些case的行为很容易理解,接下来说说需要我们注意的地方,即case语句是如何将我们提供的表达式逐一和when语句比较的,比较的标准是什么。事实上,这里的比较是通过===操作符实现的。也就是说之前的示例实际上是按一下逻辑执行的:
name = case when 1 === x; "one" when 2 === x; "two" when 3 === x; "three" else "many" end
===操作符针对不同class的行为不同,逐一介绍
Fixnum类 ===操作针对Fixnum类的行为与==操作相同,仅是比较操作符两端的数值是否相等。
Class类 ===操作会检查操作符右边的项是否是左边项所指定的class的一个实例。
Regexp类 ===操作会检查操作符右边的项是否匹配左边项所指定的正则表达式。
Range类 ===操作会检查操作符右边的项是否落在左边项所指定的区间内。
示例代码:
puts case x when String then "string" when Numeric then "number" when TrueClass, FalseClass then "boolean" else "other" end
while line=gets.chomp do case line when /^\s*#/ next when /^quit$/i break else puts line.reverse end end
没有评论:
发表评论