val1 = 1
val2 = "1"
if val1 == val2 #< Question is in this line
end
数値とその文字列の表記方法を教えてください。数値とその文字列の比較
val1 = 1
val2 = "1"
if val1 == val2 #< Question is in this line
end
数値とその文字列の表記方法を教えてください。数値とその文字列の比較
他のいずれかに変換しますので、次のいずれか
val1.to_s == val2 # returns true
または:
val1 == val2.to_i # returns true
ルビーは(タイプは、実行時に知られている)dynamically typedですが、それはまたstrongly typed(タイプはdoesnのです
いずれかがnil、英数字の文字列または空の文字列であるかどうかわからないと仮定して、両側を文字列に変換することをお勧めします。次に比較する。
val1.to_str == val2.to_str => true
nil.to_str == "".to_str => true
"ab123".to_str == 123.to_str => false
この質問への重要な追加:
Integer(val1) == Integer(val2)
私は、明示的、短期解決のためではない探してここに来たが、これは私の知る限り最も安全な方法です。
Integer("123a") # ArgumentError: invalid value for Integer(): "123a"
注意してください!基数を指定しないと、 "0"で始まる文字列は8進数で解釈されます! https://ruby-doc.org/core-2.2.3/Kernel.html#method-i-Integer –
finishing_moves
GEMは、任意の型キャストを実行することなく、比較を実行#same_as
方法を有しています。
val1 = 1
val2 = "1"
val1.same_as val2
# => True
val2.same_as val1
# => True
をお試しください整数9は適切ではない可能性があり、意図していなければバグにつながる可能性があります。 – ehsanul