Ruby map 方法语法问题[重复]

Posted

技术标签:

【中文标题】Ruby map 方法语法问题[重复]【英文标题】:Ruby map method syntax question [duplicate] 【发布时间】:2011-07-11 01:19:55 【问题描述】:

可能重复:What does map(&:name) mean in Ruby?

我在看railscasts more virtual attributes episode。在那一集中,ryan 有一次使用了我无法理解的 map 方法语法,有人可以解释一下吗?

tags.map(&:name).join(' ')

tags 是Tag Model 的一个对象,它有一个name 属性。我能够理解这个的含义(我想是这样:))。所有标签对象的名称属性都作为数组检索并基于“”进行连接。但是&:name是怎么回事

谢谢

【问题讨论】:

顺便说一句:&:name 语法仅适用于 Ruby >=1.9 或 ActiveSupport。 @Mark,这是不正确的。它在 1.8.7 核心 - ruby-doc.org/core-1.8.7/classes/Symbol.html#M000386 这是 *** 上已经提出和回答的不少于 12 个其他问题的副本:Understanding [ClassOne, ClassTwo].each(&:my_method)、What does map(&:name) mean in Ruby?、What exactly is is this in ruby: &:capitalize、Ruby/Ruby on Rails ampersand colon shortcut、Ruby : &:symbol syntax、 … …What is this &:last Ruby Construct Called?,What do you call the &: operator in Ruby?,What does map(&:name) do in this Ruby code?,What are :+ and &+ in ruby?,&:views_count in Post.published.collect(&:views_count),Ruby Proc Syntax,How does “(1..4).inject(&:+)” work in Ruby。 @Jörg 可能属于这里:meta.stackexchange.com/questions/9686/… 【参考方案1】:

&Symbol#to_proc 的快捷方式,它将您传递给它的符号转换为对象上的方法名称。所以&:name 转换为 |reciever| receiever.name 然后传递给map 方法。

这是使您的代码更加简洁并避免到处都有大量代码块的好方法。

【讨论】:

【参考方案2】:

它是tags.map(:name.to_proc) 的简写,就像调用tags.map|tag| tag.name 一样,只是将所有标签名称收集到一个数组中。

【讨论】:

以上是关于Ruby map 方法语法问题[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Ruby语法“OR”运算符[重复]

Ruby 方法

Ruby 方法

Ruby 方法

Ruby类问题[重复]

为啥#map 比#each 更有效?