Hash Rocket có bị ngừng sử dụng không?


99

Bài đăng tên lửa RIP Hash được trích dẫn rõ ràng dường như ngụ ý rằng cú pháp Hash Rocket ( :foo => "bar") không được dùng nữa để thay thế cho kiểu băm JSON mới sang Ruby ( foo: "bar"), nhưng tôi không thể tìm thấy bất kỳ tài liệu tham khảo cuối cùng nào nêu rõ dạng Hash Rocket thực sự không được chấp nhận / không được hỗ trợ kể từ Ruby 1.9.


Tôi nghĩ rằng gã đó chỉ sử dụng Ruby với Rails.
Niklas B.

Long sống tên lửa
HashRocketSyntax

Rocket vẫn còn đang mạnh 🚀
mahemoff

Câu trả lời:


132

Tác giả của bài đăng blog đó đang quá kịch tính và ngu ngốc, điều =>này vẫn khá cần thiết . Đặc biệt:

  1. Bạn phải sử dụng tên lửa cho các biểu tượng yêu cầu trích dẫn: :'where.is' => xhợp lệ nhưng 'where.is': xkhông. Ruby 2.2 đã khắc phục sự cố này nên bạn có thể nói 'where.is': xtrong Ruby 2.2+.
  2. Bạn phải sử dụng tên lửa cho các ký hiệu không phải là nhãn hợp lệ: :$set => xhợp lệ nhưng $set: xkhông hợp lệ . Trong Ruby 2.2+, bạn có thể giải quyết vấn đề này bằng dấu ngoặc kép: '$set': xwill do The Right Thing.
  3. Bạn phải sử dụng tên lửa nếu bạn sử dụng các khóa trong Hàm băm của mình không phải là ký hiệu: 's' => xhợp lệ nhưng 's': xlà một cái gì đó hoàn toàn khác.

Tất nhiên, bạn có thể kiểm soát xung quanh những điều trên theo cách rõ ràng:

h = { }
h[:'where.is'] = 'pancakes house?'
# etc.

nhưng đó chỉ là xấu xí và không cần thiết.

Tên lửa sẽ không đi đến đâu nếu không làm tê liệt Ruby's Hashes.


6
s / quá kịch tính và ngu ngốc / kịch tính và biện hộ với một sự kính trọng hùng hồn /. Phần còn lại của điểm của bạn đứng.
dbenhur

15
Bạn phải tự hỏi liệu việc sử dụng cú pháp mới, khi bạn vẫn cần phải dựa vào cú pháp cũ cho một số trường hợp nhất định, sẽ đơn giản làm phức tạp mã của chúng ta.
Dave Rapin

4
@DaveRapin: Đó là lý do tại sao tôi không bận tâm đến cú pháp không phải tên lửa. Tôi thực hiện một chút công việc MongoDB và tôi thường sử dụng các ký hiệu không phải là Hash key (đừng bận tâm về tất cả những h[:s]gì tôi làm) vì vậy cú pháp kiểu JavaScript chỉ là một sự phức tạp vô nghĩa đối với tôi. Có vẻ như tôi nghĩ ra một ý tưởng kém cỏi và bây giờ chúng tôi bị mắc kẹt với nó và sự nhầm lẫn liên quan mãi mãi.
mu quá ngắn

8
@DaveRapin Cân nhắc a = [0,1,4,9]vs a = Array.new(4){ |i| i**2 }. Tại sao lại sử dụng cái trước khi đôi khi bạn cần sử dụng cái sau? Trả lời: vì nó tiện lợi hơn. TIMTOWTDI không làm phức tạp ngôn ngữ, nhưng đây là một sự cân bằng. Ở cốt lõi, Lua thực sự tao nhã và do đó dễ học, nhưng thực sự gây khó chịu khi viết mã. Ruby có rất nhiều trường hợp đặc biệt và các tính năng tùy chỉnh khiến việc học trở nên khó hơn, nhưng rất vui khi được lập trình. Tôi, xin chào mừng bạn. ký hiệu Hash-with-Symbol-key đơn giản hơn để nhập, dễ đọc hơn cho trường hợp phổ biến.
Phrogz

7
Mặc dù ít thú vị hơn khi nhập, tôi chắc chắn thích tên lửa băm hơn. Tại sao? bởi vì nó có nghĩa là bất cứ khi nào tôi sử dụng ký hiệu cho một khóa, tôi có thể tìm kiếm nó ở bất kỳ đâu trong dự án của mình bằng cách tìm kiếm một chuỗi bắt đầu bằng dấu hai chấm. Đối với tôi, sự thiếu nhất quán giữa các ký tự thực được sử dụng để biểu thị chìa khóa my_hash = {a:1}myhash[:a] = 1ít nhất là khá khó chịu. Tôi chắc rằng tôi không phải là người duy nhất cảm thấy như vậy.
Huliax
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.