2015-08-08 17 views

Trả lời

18

Dưới đây là ví dụ đơn giản mà sẽ cho bạn thấy sự khác biệt giữa đơn giản ruby ​​băm & một "ActiveSupport :: HashWithIndifferentAccess"

  • HashWithIndifferentAccess cho phép chúng ta truy cập vào chìa khóa băm như một biểu tượng hoặc chuỗi

đơn giản của Ruby Hash

$ irb 
    2.2.1 :001 > hash = {a: 1, b:2} 
    => {:a=>1, :b=>2} 
    2.2.1 :002 > hash[:a] 
    => 1 
    2.2.1 :003 > hash["a"] 
    => nil 

ActiveSupport :: HashWithIndifferentAccess

2.2.1 :006 > hash = ActiveSupport::HashWithIndifferentAccess.new(a: 1, b:2) 
NameError: uninitialized constant ActiveSupport 
    from (irb):6 
    from /home/synerzip/.rvm/rubies/ruby-2.2.1/bin/irb:11:in `<main>' 
2.2.1 :007 > require 'active_support/core_ext/hash/indifferent_access' 
=> true 
2.2.1 :008 > hash = ActiveSupport::HashWithIndifferentAccess.new(a: 1, b:2) 
=> {"a"=>1, "b"=>2} 
2.2.1 :009 > hash[:a] 
=> 1 
2.2.1 :010 > hash["a"] 
=> 1 
  • lớp HashWithIndifferentAccess được thừa hưởng từ ruby ​​"Hash" & trên hành vi đặc biệt được thêm vào trong đó.
+1

ví dụ hoàn hảo –

3

Trong Ruby Hash:

hash[:key] 
hash["key"] 

là khác nhau. Trong HashWithIndifferentAccess như tên cho thấy, bạn có thể truy cập vào key một trong hai cách.

Trích dẫn chính thức documentation này:

Thực hiện một hash nơi phím: foo và "foo" được coi là cùng.

Bên trong những biểu tượng được ánh xạ tới chuỗi khi được sử dụng như phím trong toàn bộ giao diện viết (gọi [] =, sáp nhập, vv). Đây mapping thuộc về giao diện công cộng. Ví dụ, đưa ra:

hash = ActiveSupport::HashWithIndifferentAccess.new(a: 1)

Bạn đang đảm bảo rằng chìa khóa được trả về như là một chuỗi:

hash.keys # => ["a"]

+0

Tôi nghĩ trong trường hợp HashWithIndifferentAccess, ký hiệu được ánh xạ tới chuỗi khi được sử dụng làm khóa trong toàn bộ giao diện viết (gọi [] =, hợp nhất, v.v.). Đúng không? –

+0

có. Bên trong những biểu tượng được ánh xạ tới chuỗi khi được sử dụng như là chìa khóa trong toàn bộ giao diện viết (gọi [] =, sáp nhập, vv). Ánh xạ này thuộc về giao diện công khai. – shivam

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