Tôi không có ý tưởng nếu đây là một vấn đề Hash hoặc một vấn đề mảng, nhưng tôi không tìm ra lý do tại sao dấu hoa thị (*) được yêu cầu trong ví dụ thứ ba để có được một băm đầy dữ liệu. Không có nó, nó sẽ xuất ra một băm rỗng.Tại sao tôi cần dấu hoa thị trước một mảng?
# -*- coding: utf-8 -*-
require 'pp'
pp [[:first_name, 'Shane'], [:last_name, 'Harvie']]
# => [[:first_name, "Shane"], [:last_name, "Harvie"]]
pp [[:first_name, 'Shane'], [:last_name, 'Harvie']].flatten
# => [:first_name, "Shane", :last_name, "Harvie"]
pp Hash[*[[:first_name, 'Shane'], [:last_name, 'Harvie']].flatten]
# => {:first_name=>"Shane", :last_name=>"Harvie"}
pp Hash[[[:first_name, 'Shane'], [:last_name, 'Harvie']].flatten]
# => {}
Dưới đây là giải thích về phương pháp.
--------------------------------------------------------------- Hash::[]
Hash[ [key =>|, value]* ] => hash
From Ruby 1.8
------------------------------------------------------------------------
Creates a new hash populated with the given objects. Equivalent to
the literal +{ _key_, _value_, ... }+. Keys and values occur in
pairs, so there must be an even number of arguments.
Hash["a", 100, "b", 200] #=> {"a"=>100, "b"=>200}
Hash["a" => 100, "b" => 200] #=> {"a"=>100, "b"=>200}
{ "a" => 100, "b" => 200 } #=> {"a"=>100, "b"=>200}
Cảm ơn bạn rất nhiều vì đã giải thích chi tiết và liên kết. Bây giờ tôi hoàn toàn hiểu điều này là gì. Bây giờ mọi thứ đều có ý nghĩa. –