0

我尝试用多种方法重写这个函数来解决这个错误,但是,在禁用它周围的警察之前,我想听从其他专家的意见。

  def numeric?(obj)
    obj.to_s.match(/\A[+-]?\d+?(\.\d+)?\Z/) == nil ? false : true
  end

这是这样使用的:

  def index
    if params[:job_id] && numeric?(params[:job_id])

此问题已通过以下方式解决:检查变量是否为整数

在此处输入图像描述

更新尝试:

  def numeric?(string)
    !!Kernel.Float(string)
  rescue TypeError, ArgumentError
    false
  end

参考如何确定字符串是否为数字?

新错误: 在此处输入图像描述

4

3 回答 3

1
def numeric?(arg)
  !/\A[+-]?\d+\z/.match(arg.to_s).nil?
end

通过默认配置的所有 Rubocop 测试。在https://gist.github.com/aarontc/d549ee4a82d21d263c9b完成测试

于 2016-02-19T19:16:08.620 回答
1

以下代码片段可以解决问题:

def numeric?(arg)
  return false if arg.is_a?(Float)
  return !Integer(arg).nil? rescue false
end

为以下各项返回 false:'a'12.34'12.34'

对于以下情况返回 true:'1', 1.

于 2016-02-19T07:43:13.347 回答
0

你可以写方法

def numeric?(obj)
  obj.to_s.match(/\A[+-]?\d+?(\.\d+)?\Z/).nil?
end

您真的不需要进行nil比较,然后根据返回的决定 true/ false#nil?方法为你做。

于 2016-02-19T04:58:23.527 回答