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 doesmap(&: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 方法语法问题[重复]的主要内容,如果未能解决你的问题,请参考以下文章