你能解释下面的代码在做什么:
resp = s3.list_buckets
puts resp.buckets.map(&:name)
我的问题仅针对map
。我无法理解map
如何在这里使用。另外,(&:name)
是什么意思?
我提到map documentation。但是,我无法将其与上面代码中的地图相关联。根据文档,地图后面应跟{}
,但在上面的代码后面跟着()
。
在perl上下文中,map
将在数组/列表上工作,并将返回一个新的数组/列表。所以,它似乎也在做类似的事情,但我无法解码。
任何指向文档的指针都会有所帮助。
答案 0 :(得分:2)
map
是collect
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对象转换为代码块。