2009-08-02 36 views

Trả lời

28

Chuyển đổi hoặc cho người khác, vì vậy một trong hai:

val1.to_s == val2 # returns true 

Hoặc:

val1 == val2.to_i # returns true 

Mặc dù ruby ​​là dynamically typed (loại được biết đến trong thời gian chạy), nó cũng là strongly typed (loại doesn Không được nhập hoàn toàn)

+6

Tôi muốn đi với đề nghị đầu tiên (thay đổi số nguyên để string), bởi vì nếu bạn chuyển đổi một chuỗi như "9abc" để nguyên sử dụng to_i, bạn được cung cấp trở lại số nguyên 9, có thể không phù hợp và có thể dẫn đến lỗi nếu nó không phải là ý định. – ehsanul

3

Giả sử bạn không biết liệu một trong số đó có phải là số không, một chuỗi số hoặc chuỗi rỗng, tôi khuyên bạn nên chuyển đổi cả hai bên thành chuỗi d sau đó so sánh.

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

Một sự bổ sung quan trọng cho câu hỏi này:

Integer(val1) == Integer(val2) 

Tôi đến đây tìm kiếm một giải pháp ngắn, không phải là rõ ràng, nhưng điều này là như xa như tôi biết cách an toàn nhất.

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

Hãy cẩn thận! Nếu bạn không chỉ định cơ số thì các chuỗi bắt đầu bằng "0" sẽ được diễn giải trong bát phân! https://ruby-doc.org/core-2.2.3/Kernel.html#method-i-Integer –

0

Các finishing_moves đá quý có một phương pháp #same_as mà thực hiện sự so sánh mà không cần phải làm bất cứ typecasting.

val1 = 1 
val2 = "1" 

val1.same_as val2 
# => True 

val2.same_as val1 
# => True 
0

Hãy thử điều này

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

Điều này làm gì? Nó giải quyết vấn đề như thế nào? – Adam

+0

Vui lòng thêm thông tin khác vào câu trả lời này. Điều gì đang xảy ra? Tại sao điều này làm việc? – Jens

Các vấn đề liên quan