这张“地图”怎么样?

时间:2013-12-11 04:51:00

标签: ruby map

你能解释下面的代码在做什么:

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

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

我提到map documentation。但是,我无法将其与上面代码中的地图相关联。根据文档,地图后面应跟{},但在上面的代码后面跟着()

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

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

2 个答案:

答案 0 :(得分:2)

mapcollect

的别名

map(&:name)map {|x| x.name }

的捷径

map期待一个阻止。 &在对象上调用to_proc,并将其作为块传递,并且符号已实现to_proc。有关详细信息,请参阅docs

答案 1 :(得分:1)

&安培; of(&:name)表示它应该是一个Proc对象,并将被转换为代码块。

从&期望一个Proc对象:name将被转换为Proc对象,这可以通过调用:name.to_proc来完成。

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

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