0

我找到了用于检查字符串是否为数字的代码。它工作正常。但我不知道它是如何工作的。谁能解释一下。

    str = "12132344", str1="abcd", str2="12213234.132332"

    /^[\d]+(\.[\d]+){0,1}$/ === str  #=> true  //perfect
    /^[\d]+(\.[\d]+){0,1}$/ === str1 #=> false //perfect
    /^[\d]+(\.[\d]+){0,1}$/ === str2 #=. true  //perfect

当我更改如下比较时:

    str === /^[\d]+(\.[\d]+){0,1}$/ #=>  false
    str1 === /^[\d]+(\.[\d]+){0,1}$/ #=> false
    str2 === /^[\d]+(\.[\d]+){0,1}$/ #=> false

我还找到了使用匹配的替代方法。

谁能解释 (===) 运算符在这里做什么?这个怎么运作?还有其他替代方法吗?

4

2 回答 2

3

在 Ruby 中,运算符重载可用于定义每个运算符的作用,但必须由运算符左侧的类来完成。

此方法在Regexp对象类的 Ruby 标准库中定义。参考:http ://www.ruby-doc.org/core-1.9.3/Regexp.html#method-i-3D-3D-3D 。

它仅适用Regexp于左侧的类(即模式),因为它被定义为仅在Regexp类中以这种方式工作。

在这种情况下,Regexp定义===为 的同义词=~,它匹配给定正则表达式模式的字符串。

该类String===运算符定义为相等运算符。这意味着如果右侧参数不是字符串,则返回 false,否则仅当两个字符串匹配时才返回 true。参考:http ://www.ruby-doc.org/core-1.9.3/String.html#method-i-3D-3D-3D

于 2012-09-05T08:02:46.887 回答
1
def is_numeric?(str)
  str =~ /^[\d]+(\.[\d]+){0,1}$/
end
于 2012-09-05T08:02:55.380 回答