学习Ruby。需要创建数组的散列。这行得通..。但我不太明白Ruby在做什么。有没有人能详细解释一下?
months = Hash.new{|h, k| h[k] = []}发布于 2012-02-01 17:23:26
这将使用Hash.new构造函数创建一个散列,该散列的项默认为空列表。因此,您可以这样做:
months[2012] << 'January'并且该数组将被创建,而无需您首先执行months[2012] = []。
简短解释:{ |h, k| h[k] = [] }是一个Ruby块,正如mu所提到的,在某种程度上,它可以与Javascript中的function或Python语言中的lambda进行比较。它基本上是一段匿名代码,接受两个参数(h,k,管道只有从代码中分离参数的意义),并返回一个值。在本例中,它接受一个散列和一个键,并将键的值设置为一个新的数组[]。它返回一个对散列的引用(但这在这个上下文中并不重要)。
现在来看Hash.new:它是Hash的构造函数,我假设您现在已经知道它是什么了。它可选地将一个块作为参数,每当访问Hash中尚不存在的键时都会调用该参数。在上面的示例中,键2012之前没有被访问过,因此调用了该块,这将创建一个新数组并将其分配给键。然后,<<操作符就可以处理该数组实例了。
https://stackoverflow.com/questions/9093367
复制相似问题