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を返す決定に基づいてい ます。メソッドがそれを行います。truefalse#nil?

于 2016-02-19T04:58:23.527 に答える