2009-08-02 7 views

答えて

28

他のいずれかに変換しますので、次のいずれか

val1.to_s == val2 # returns true 

または:

val1 == val2.to_i # returns true 

ルビーは(タイプは、実行時に知られている)dynamically typedですが、それはまたstrongly typed(タイプはdoesnのです

+6

をお試しください整数9は適切ではない可能性があり、意図していなければバグにつながる可能性があります。 – ehsanul

3

いずれかがnil、英数字の文字列または空の文字列であるかどうかわからないと仮定して、両側を文字列に変換することをお勧めします。次に比較する。

val1.to_str == val2.to_str => true 
nil.to_str  == "".to_str => true 
"ab123".to_str == 123.to_str => false 
0

この質問への重要な追加:

Integer(val1) == Integer(val2) 

私は、明示的、短期解決のためではない探してここに来たが、これは私の知る限り最も安全な方法です。

Integer("123a") # ArgumentError: invalid value for Integer(): "123a" 
+1

注意してください!基数を指定しないと、 "0"で始まる文字列は8進数で解釈されます! https://ruby-doc.org/core-2.2.3/Kernel.html#method-i-Integer –

0

finishing_moves GEMは、任意の型キャストを実行することなく、比較を実行#same_as方法を有しています。

val1 = 1 
val2 = "1" 

val1.same_as val2 
# => True 

val2.same_as val1 
# => True 
0

あなたがto_iを使用して整数に「9abc」のような文字列を変換する場合、あなたが戻って与えられているので、私は、最初の提案(整数を文字列に変更)で行くと思います。この

true if Integer(val1) == Integer(val2) rescue false 
+1

これは何をするのですか?どのようにして問題を解決するのですか? – Adam

+0

この回答に情報を追加してください。何が起こっている?なぜこれは機能していますか? – Jens