繁体   English   中英

如何将 RegExp 置于 ruby 的情况下?

[英]How can I put RegExp in ruby's case condition?

像这样的东西:

a = 6
case a
when /\d/ then "it's a number"
end

没有运气,它不起作用

它不起作用,因为正则表达式匹配字符串,而 6 不是字符串。 如果您执行a = '6' ,它将起作用。

当与初始化器上的值一起使用时,所有 case 都是用 === 对每个表达式进行尝试。 问题不在于大小写,请尝试:

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等。

因为正则表达式匹配字符串。 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM