首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有人能给我详细解释一下这个Ruby代码块是怎么回事吗?

有人能给我详细解释一下这个Ruby代码块是怎么回事吗?
EN

Stack Overflow用户
提问于 2012-02-01 17:20:49
回答 1查看 137关注 0票数 0

学习Ruby。需要创建数组的散列。这行得通..。但我不太明白Ruby在做什么。有没有人能详细解释一下?

代码语言:javascript
复制
months = Hash.new{|h, k| h[k] = []}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-01 17:23:26

这将使用Hash.new构造函数创建一个散列,该散列的项默认为空列表。因此,您可以这样做:

代码语言:javascript
复制
months[2012] << 'January'

并且该数组将被创建,而无需您首先执行months[2012] = []

简短解释{ |h, k| h[k] = [] }是一个Ruby块,正如mu所提到的,在某种程度上,它可以与Javascript中的function或Python语言中的lambda进行比较。它基本上是一段匿名代码,接受两个参数(hk,管道只有从代码中分离参数的意义),并返回一个值。在本例中,它接受一个散列和一个键,并将键的值设置为一个新的数组[]。它返回一个对散列的引用(但这在这个上下文中并不重要)。

现在来看Hash.new:它是Hash的构造函数,我假设您现在已经知道它是什么了。它可选地将一个块作为参数,每当访问Hash中尚不存在的键时都会调用该参数。在上面的示例中,键2012之前没有被访问过,因此调用了该块,这将创建一个新数组并将其分配给键。然后,<<操作符就可以处理该数组实例了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9093367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档