由于某种原因,此switch语句的行为与我预期的不同:
aString = "DATE MODIFIED"
case aString
when "DATE MODIFIED"
=> Never gets here
end
但这有效
aString = "DATE"
case aString
when "DATE"
=> Does get here
end
任何人都可以解释原因,并提供一种在交换机中使用带空格的字符串的方法吗?
由于
答案 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
)