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
또는 : 루비 dynamically typed (타입이 런타임에 알려져있다)이다
val1 == val2.to_i # returns true
있지만, 그것은 또한 strongly typed (유형 아무튼입니다) 암시 적으로 타입 변환을 얻지 못합니다.
두 숫자 중 하나가 영숫자 문자열인지 빈 문자열인지 모를 경우에는 양쪽을 문자열로 변환하는 것이 좋습니다. 다음 비교.
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
일품 어떤 타입 캐스팅을 수행 할 필요없이 상기 비교를 수행하는 방법 #same_as
있다.
val1 = 1
val2 = "1"
val1.same_as val2
# => True
val2.same_as val1
# => True
이 정수 9는 적절하지 않을 수 있으며, 의도가 아니라면 버그가 될 수 있습니다. – ehsanul