带有字符串的Ruby switch语句

时间:2011-09-19 07:49:54

标签: ruby

由于某种原因,此switch语句的行为与我预期的不同:

aString = "DATE MODIFIED"

case aString
    when "DATE MODIFIED"
    => Never gets here
end

但这有效

aString = "DATE"
case aString
    when "DATE"
    => Does get here
end

任何人都可以解释原因,并提供一种在交换机中使用带空格的字符串的方法吗?

由于

1 个答案:

答案 0 :(得分:7)

就像Chuck在评论中提到的那样,我无法复制你所询问的行为。

出现这种错误的一个可能原因:DATE和MODIFIED之间有一个或多个空格。

解决方案:使用正则表达式检查:

[ 
  "DATE MODIFIED",
  "DATE  MODIFIED", #2 spaces
].each{|aString|
  print "Check #{aString}: "
  case aString
      when "DATE MODIFIED"
        puts "Exact hit with one space"
      #without \A/\Z the string could be part of a longer String
      when /\ADATE\s+MODIFIED\Z/ 
        puts "hit with one or more spaces"
  end
}

另一个常犯的错误:从stdin读取String并包含换行符。解决方案:使用正则表达式或使用String#chomp检查(如果要忽略前导和尾随空格,则选择String#split