Tôi đang gọi API của bên thứ ba (viết bằng PHP) đi qua trong một số cặp khóa/giá trị.Ruby Hash.new vs Hash literal
Mã này hoạt động:
h = Hash.new
h['first_name'] = "Firstname"
h['last_name'] = "Lastname"
APICall([h]) # Record gets created
này không:
h = {'first_name' => "Firstname", 'last_name' => "Lastname"}
APICall([h]) # Record does not get created
Khi tôi đổ Hash ra cửa sổ Console trong cả hai trường hợp tôi nhận được cấu trúc dữ liệu tương tự. Vì vậy, tại sao nó là cách đầu tiên hoạt động nhưng thứ 2 không?
EDIT: Không chắc chắn nếu điều này quan trọng nhưng tôi đang sử dụng Ruby 1.8.7p72/Linux. Một trong những cặp khóa/giá trị là một chuỗi hình ảnh được mã hóa Base64.
Có không có lý do gì nên xảy ra. Trong các thử nghiệm của tôi, 'Hash.object_id' trả về cùng giá trị với' Hash.new.class.object_id' và '{} .class.object_id'. Họ đều cùng lớp. Bạn có nhận được bất kỳ lỗi nào từ cuộc gọi API không? – Brandan
Họ trông giống như tôi. Nếu đây là tất cả các mã của bạn, tôi không chắc chắn lý do tại sao một người sẽ làm việc và người kia thì không. Nếu đây là một ứng dụng Rails, tôi sẽ xem xét bạn đang bị ảnh hưởng bằng cách sử dụng một Hash nơi một [HashWithIndifferentAccess] (http://as.rubyonrails.org/classes/HashWithIndifferentAccess.html) là bắt buộc (đây chỉ là một linh cảm , nếu mã của bạn là như trên đây sẽ không phải là vấn đề của bạn). – gar
@ Brand: Rất tiếc, không có lỗi nào được API trả lại. –