khác nhìn vào các câu trả lời ở đây có thể tìm thấy nó thú vị khi biết rằng một ngoại lệ xảy ra khi bạn sử dụng các số nguyên như phím biểu tượng trong một Ruby hash{symbol: value}
hash = {1: 'one'} # will not work
hash = {1 => 'one'} # will work
Giải thích yêu cầu:
Câu trả lời đơn giản nhất vì sao ví dụ đầu tiên bị lỗi có thể là to_sym
không phải là phương pháp được triển khai cho Fixnum số nguyên.
Để đi sâu hơn để giải thích lý do tại sao, một trong những lợi ích chính để sử dụng biểu tượng là hai biểu tượng trên thực tế là "cùng một đối tượng". Hoặc ít nhất họ chia sẻ cùng một id đối tượng.
:foo.object_id == :foo.object_id
=> true
Các chuỗi giống nhau không chia sẻ cùng một đối tượng và do đó không chia sẻ cùng một id đối tượng.
"foo".object_id == "foo".object_id
=> false
Giống như các ký hiệu, số nguyên Fixnum giống nhau sẽ có cùng id đối tượng. Do đó bạn không thực sự cần phải chuyển đổi chúng thành các biểu tượng.
one = 1
=> 1
uno = 1
=> 1
one.object_id
=> 3
one.object_id == uno.object_id
=> true
Bạn đã thử chưa? Trên bàn điều khiển của bạn, bạn có thể gõ IRB và nhận được một bàn điều khiển ruby .. khá hữu ích cho việc cố gắng loại điều này ... Về chủ đề, bạn sẽ có thể sử dụng số nguyên tốt. – Deleteman
["ngoại trừ việc lập chỉ mục được thực hiện thông qua các khóa tùy ý của bất kỳ loại đối tượng nào"] (http://www.ruby-doc.org/core/Hash.html). Số nguyên là các đối tượng trong Ruby, do đó, Hashes cho vấn đề đó, do đó bạn có thể sử dụng Hashes làm khóa. –