![](/img/trans.png)
[英]How can I get Ruby's Regexp to work in Heroku without Internal Server Error?
[英]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.