创建hash的方式有很多种,下面用block来创建下hash, 一般不太常用,小小总结下吧:
看如下代码:
hash = Hash.new {|hash, key| hash[key] = [] }
hash[:one] << "Angelababy" => {:one=>["Angelababy"]}
hash[:two] << "天霸动霸tua" {:one=>["Angelababy"], :two=>["天霸动霸tua"]}
可能看上去有点懵逼,下面来解释下:
用block做参数来创建一个hash的话,在每次用Hash#[]方法来读取一个key时,如果Key找不到,会自动调用你传入的block。
具体到你的例子, hash[:one] << “Angelababy”这行代码,发生的情况如下:
1.读取hash[:one]的值
2.发现:one这个key不存在,调用block {|hash, key| hash[key] = [] }, 效果就是hash[:one] = [],然后返回hash[:one]的值,也就是一个数组 往hash[:one]这个数组中增加一个字符串”Angelababy” 于是,hash[:one] 的值,就变成了 [“Angelababy”]