类似的东西:
a = 6
case a
when /\d/ then "it's a number"
end
没有运气,它不起作用
答案 0 :(得分:2)
它不起作用,因为正则表达式匹配字符串,而6不是字符串。如果你做a = '6'
,那就可以了。
答案 1 :(得分:2)
当与初始化程序中的值一起使用时,所有情况都是对每个表达式使用===进行尝试。问题不在于案例,请尝试:
6 === /\d/
所有这一切,正则表达式只匹配字符串。尝试通过以下方式替换第二行:
case (a.is_a?(String) ? a : a.to_s)
编辑:要在评论中回答OP的后续行动,这里有一个微妙的内容。
/\d/ === '6' # => true
'6' === /\d/ # => false
初学者可能出乎意料,String#===和Regexp#===有不同的效果。所以,对于:
case 'foo'
when String
end
这将调用String === 'foo'
,而不是'foo' === String
等。
答案 2 :(得分:1)
因为regexps匹配字符串。 A是Fixnum。
如果你要写a = "6"
,那就行了。如果a是数字,可以使用a.is_a?(Numeric)
答案 3 :(得分:1)
使其成功的一个小改动:
a = 6
case a.to_s
when /\d/ then "it's a number"
end
to_s会将所有内容转换为字符串。请注意,您的正则表达式只检查字符串中任何位置是否存在数字。
这样做可能会更好:
case a
when Numeric then "it's a number"
end