2009-08-02 8 views

답변

28

변환 중 하나를 다른, 그래서 다음 중 하나를

val1.to_s == val2 # returns true 

또는 : 루비 dynamically typed (타입이 런타임에 알려져있다)이다

val1 == val2.to_i # returns true 

있지만, 그것은 또한 strongly typed (유형 아무튼입니다) 암시 적으로 타입 변환을 얻지 못합니다.

+6

이 정수 9는 적절하지 않을 수 있으며, 의도가 아니라면 버그가 될 수 있습니다. – ehsanul

3

두 숫자 중 하나가 영숫자 문자열인지 빈 문자열인지 모를 경우에는 양쪽을 문자열로 변환하는 것이 좋습니다. 다음 비교.

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 일품 어떤 타입 캐스팅을 수행 할 필요없이 상기 비교를 수행하는 방법 #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