2

is_a?オブジェクトが整数かどうかをチェックする関数があることをググってみました。

しかし、Rails コンソールで試してみましたが、うまくいきません。

次のようなコードを実行しました。

 "1".is_a?
 1.is_a?

私は何か見落としてますか?

4

6 に答える 6

19

テスト対象のクラスを含めるのを忘れました:

"1".is_a?(Integer) # false
1.is_a?(Integer) # true
于 2010-11-26T03:16:43.767 に答える
3

文字列が実質的に整数であるかどうかを示す組み込み関数はありませんが、独自の関数を簡単に作成できます。

class String
  def int
    Integer(self) rescue nil
  end
end

これが機能するInteger()のは、文字列を整数に変換できない場合にカーネル メソッドがエラーをスローし、インラインrescue nilがそのエラーを nil に変換するためです。

Integer("1") -> 1
Integer("1x") -> nil
Integer("x") -> nil

したがって:

"1".int -> 1 (which in boolean terms is `true`)
"1x".int -> nil
"x".int -> nil

整数自体ではなく、真の場合に返すように関数を変更することもできtrueますが、文字列が整数かどうかをテストする場合は、その整数を何かに使用する可能性があります! 私は非常に一般的に次のようなことをします:

if i = str.int
  # do stuff with the integer i
else
  # error handling for non-integer strings
end

テストポジションでの割り当てが気分を害する場合は、いつでも次のようにすることができます。

i = str.int
if i
  # do stuff with the integer i
else
  # error handling for non-integer strings
end

いずれにせよ、この方法は変換を 1 回しか実行しないため、これらを多数実行する必要がある場合は、速度が大幅に向上する可能性があります。

[関数名を からint?に変更しintて、true/false のみを返す必要があることを暗示しないようにしました。]

于 2010-11-26T04:00:20.533 に答える
1

私は正規表現を使用しました

if a =~ /\d+/
   puts "y"
else
   p 'w'
end
于 2010-11-26T05:41:51.577 に答える
0

私は似たようなものが欲しかったのですが、これらのどれも私のためにそれをしませんでしたが、これはそうです-「クラス」を使用してください:

a = 11
a.class
=> Fixnum
于 2011-05-31T03:24:07.183 に答える
0

Rubyにはrespond_toという関数がありますか? 特定のクラスまたはオブジェクトに特定の名前のメソッドがあるかどうかを確認するために使用できます。構文は次のようなものです

User.respond_to?('name') # returns true is method name exists
otherwise false

http://www.prateekdayal.net/2007/10/16/rubys-responds_to-for-checking-if-a-method-exists/

于 2010-11-26T03:11:33.557 に答える
0

多分これはあなたを助けるでしょう

str = "1"
=> "1"
num = str.to_i
=> 1
num.is_a?(Integer)
=> true

str1 = 'Hello'
=> "Hello"
num1 = str1.to_i
=> 0
num1.is_a?(Integer)
=> true
于 2010-11-26T07:31:33.433 に答える