is_a?
オブジェクトが整数かどうかをチェックする関数があることをググってみました。
しかし、Rails コンソールで試してみましたが、うまくいきません。
次のようなコードを実行しました。
"1".is_a?
1.is_a?
私は何か見落としてますか?
is_a?
オブジェクトが整数かどうかをチェックする関数があることをググってみました。
しかし、Rails コンソールで試してみましたが、うまくいきません。
次のようなコードを実行しました。
"1".is_a?
1.is_a?
私は何か見落としてますか?
テスト対象のクラスを含めるのを忘れました:
"1".is_a?(Integer) # false
1.is_a?(Integer) # true
文字列が実質的に整数であるかどうかを示す組み込み関数はありませんが、独自の関数を簡単に作成できます。
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 のみを返す必要があることを暗示しないようにしました。]
私は正規表現を使用しました
if a =~ /\d+/
puts "y"
else
p 'w'
end
私は似たようなものが欲しかったのですが、これらのどれも私のためにそれをしませんでしたが、これはそうです-「クラス」を使用してください:
a = 11
a.class
=> Fixnum
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/
多分これはあなたを助けるでしょう
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