如何解决如何将RegExp放入ruby的案卷中?
| 像这样的东西:a = 6
case a
when /\\d/ then \"it\'s a number\"
end
没有运气,那是行不通的
解决方法
与初始值设定项上的值一起使用时,所有情况都是对每个表达式使用===进行尝试。问题不在于大小写,请尝试:
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
等。
, 它不起作用,因为正则表达式与字符串匹配,而6不是字符串。如果您执行a = \'6\'
,它将起作用。
, 因为正则表达式匹配字符串。 A是一个Fixnum。
如果您写a = \"6\"
,它将起作用。可以用a.is_a?(Numeric)
测试a是否为数字
, 进行一些小的更改以使其起作用:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。