2013-12-11 33 views
0

你能解释一下下面的代码是这样做的:这个“地图”是如何工作的?

resp = s3.list_buckets 
puts resp.buckets.map(&:name) 

我的问题是特定于map。我无法理解这里如何使用map。另外,(&:name)是什么意思?

我指的是map documentation。但是,我无法将其与上述代码中的地图关联起来。根据文档,映射后应跟一个{},但后跟上面代码中的()

在Perl上下文中,map将在数组/列表上工作,并将返回一个新的数组/列表。所以,它似乎也在做类似的事情,但我无法解码。

任何指向文档的指针都会有帮助。

+0

此外:http://symbolhound.com/?q=ruby+%26%3A –

+0

看看这个http://www.potstuck.com/2011/08/06/ruby的'与地图'部分-symbols-代替-的块/。它解释了你正在寻找的所有关于to_proc符号的方法。 –

+0

@mu太矮了,谢谢你提及dups。我在搜索时使用了'map'关键字,因此没有找到他们。 – slayedbylucifer

回答

2

mapcollect

map(&:name)一个别名快捷方式map {|x| x.name }

map预计块。 &在对象上调用to_proc,并将其作为块传递并且Symbol已实现to_proc。参阅docs更多信息

+0

在阅读“'map”是“collect'的别名”后,我能够找到更多相关文档。谢谢。 – slayedbylucifer

1

的&(&:名称)指下文中它应该是一个Proc对象和将被转换为一个代码块。

由于&需要一个Proc对象,:name将被转换为Proc对象,这是通过调用:name.to_proc来完成的。

After:将名称转换为Proc对象,&然后将生成的Proc对象转换为代码块并给出代码块以进行映射。

总之,总共有两种类型转换发生,一种是将符号转换为Proc对象,另一种是将Proc对象转换为代码块。

+0

感谢您的解释。 +1。 – slayedbylucifer

+0

感谢+1。解释有点模糊,所以我重写了一个新的。 @slayedbylucifer – uncutstone