Trong Rails, bạn có thể làm hash.try(:[], :key)
giúp nếu hash
có khả năng là nil
. Có phiên bản tương đương để sử dụng toán tử điều hướng an toàn Ruby 2.3 mới &.
với []
không?Điều hướng an toàn tương đương với Rails thử băm
Trả lời
&.
không tương đương với Rails' try
, nhưng bạn có thể sử dụng &.
cho băm. Chỉ cần sử dụng nó, không có gì đặc biệt.
hash[:key1]&.[](:key2)&.[](:key3)
Mặc dù tôi không làm điều đó.
Được chấp nhận câu trả lời sẽ không chiếm khi hash
là con số không ...
Bạn có thể viết lại những gì bạn đã sử dụng toán tử nav an toàn trước khi .try
và điều đó sẽ làm việc
hash&.try(:[], :key)
nhưng bạn cũng có thể sử dụng:
http://ruby-doc.org/core-2.3.0_preview1/Hash.html#method-i-dig
A w ay bạn có thể làm điều này trên một băm bằng cách thực hiện ...
hash&.dig(:key1, :key2 ...)
sẽ trả về 0 nếu không tìm thấy khóa nào.
{ key1: { key2: 'info' } }
sẽ trở lại 'thông tin'
{ key1: { wrong_key: 'info' } }
sẽ trở nil
Pre của Ruby 2.3
tôi thường có cái gì đó như đặt này vào intializer tôi:
Class Hash
def deep_fetch *args
x = self
args.each do |arg|
x = x[arg]
return nil if x.nil?
end
x
end
end
và sau đó
response.deep_fetch 'PaReqCreationResponse', 'ThreeDSecureVERes', 'Message', 'VERes', 'CH', 'enrolled'
trong một trường hợp lập dị.
Sự đồng thuận chung trong cộng đồng có vẻ là để tránh cả hai cố gắng và các nhà điều hành cô đơn &.
của Ruby 2.3 và sau
Có Hash#dig
phương pháp bây giờ mà chỉ làm điều đó:
lấy đối tượng giá trị tương ứng với từng đối tượng khóa liên tục.
h = { foo: {bar: {baz: 1}}}
h.dig(:foo, :bar, :baz) #=> 1
h.dig(:foo, :zot) #=> nil
http://ruby-doc.org/core-2.3.0_preview1/Hash.html#method-i-dig
Có vẻ tương tự đáng ngờ trong trường hợp sử dụng để 'dig', được giới thiệu trong 2.3 giống như' & .'. Có sự khác biệt nào không? –
Thật vậy, cảm ơn bạn! :) – bbozo
IMHO này phải là câu trả lời được chấp nhận. –
Trong khi hash&.[](:key)
là thanh lịch đến rubyist đào tạo, tôi chỉ cần sử dụng hash && hash[:key]
như nó đọc tốt hơn và trực quan hơn cho các lập trình viên đến sau tôi, những người có thể không được như quen thuộc với sự phức tạp của ruby. Một số nhân vật phụ trong codebase đôi khi có thể tiết kiệm rất nhiều googling cho người khác.
(Căn cứ vào bối cảnh mà bạn muốn sử dụng trong này là trong một tuyên bố có điều kiện, tất nhiên.)
- 1. Tương đương với Array.some trong ruby / rails
- 2. Toán tử điều hướng an toàn trong C#?
- 3. muối tương đương và băm trong golang
- 4. Mã băm Ruby tương đương với Python dict setdefault
- 5. Có tương đương với `Array :: sample` cho băm không?
- 6. Truyền an toàn cho bản đồ băm
- 7. Toán tử điều hướng an toàn (&.) Cho nil
- 8. nodejs tương đương với điều này .htaccess
- 9. thử ... cuối cùng tương đương trong Matlab
- 10. ASP.NET MVC - Cách chuyển hướng an toàn?
- 11. Ruby/Rails an toàn chủ đề
- 12. Django tương đương với RPM Relic mới cho Rails?
- 13. Rails tương đương nhiều trong ASP.NET MVC3
- 14. Nhà điều hành có dấu hỏi? tương đương với thử! macro?
- 15. Bàn điều khiển Rails tương đương với khung chơi 2.4.x?
- 16. Tôi có đúng là strcmp tương đương (và an toàn) cho các văn chương không?
- 17. Haskell tương đương với Boost.Fusion
- 18. Đồ đạc thử nghiệm hoặc tương đương với dữ liệu thử nghiệm với Smalltalk Seaside?
- 19. Có hướng dẫn tương đương với rdtsc trong ARM không?
- 20. Rails Sanitize: An toàn + Cho phép nhúng
- 21. C# Toán tử điều hướng an toàn - điều gì đang thực sự xảy ra?
- 22. Sự khác biệt giữa toán tử điều hướng an toàn Ruby 2.3 '&. và 'thử!' phương thức từ ActiveSupport?
- 23. Có tương đương với iPhone với điều khiển NSTokenField không?
- 24. Điều kiện an toàn khi chuỗi không khớp với
- 25. Có tốt hơn khi tạo chuỗi băm an toàn không?
- 26. java tương đương với mkstemp
- 27. Cách triển khai điều hướng khóa băm?
- 28. Pygame tương đương với Ruby?
- 29. Swift - có an toàn với chủ đề an toàn không?
- 30. Viết các trường hợp thử nghiệm trong khuôn khổ Phoenix tương đương với ROR
có thể trùng lặp của [Ruby - Truy cập băm đa chiều và tránh truy cập đối tượng nil] (https://stackoverflow.com/question/10130726/ruby-access-multidimensional-băm-và-tránh-truy-nil-đối tượng) – kolen