ruby 中“&:”运算符的功能是啥? [复制]
Posted
技术标签:
【中文标题】ruby 中“&:”运算符的功能是啥? [复制]【英文标题】:what is the functionality of "&: " operator in ruby? [duplicate]ruby 中“&:”运算符的功能是什么? [复制] 【发布时间】:2012-03-14 20:21:25 【问题描述】:可能重复:What does map(&:name) mean in Ruby?
我遇到了一个代码 sn-p,它有以下内容
a.each_slice(2).map(&:reverse)
我不知道&:
运算符的功能。这是如何运作的?
【问题讨论】:
这是 *** 上已经提出和回答的不少于 17 个其他问题的副本:Understanding [ClassOne, ClassTwo].each(&:my_method)、What doesmap(&:name)
mean in Ruby?、What exactly is &:capitalize
in Ruby?、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,…
…What does following statement &:property
?、What does the &
mean in the following ruby syntax?、Why would one use the unary operator on a property in ruby? i.e &:first
、how does Array#map
have parameter to do something like this? 和 what does &:
mean in ruby, is it a block mixed with a symbol?。
【参考方案1】:
Ruby 中没有&:
运算符。您看到的是应用于:symbol
的&
运算符。
在方法参数列表中,&
运算符获取其操作数,如果还没有将其转换为 Proc
对象(通过在其上调用 to_proc
)并将其传递给方法,就好像块已被使用。
my_proc = Proc.new puts "foo"
my_method_call(&my_proc) # is identical to:
my_method_call puts "foo"
所以问题现在变成了“Symbol#to_proc
做什么?”,这在the Rails documentation 中很容易看到:
将符号转换为简单的过程,这对于枚举特别有用。例子:
# The same as people.collect |p| p.name
people.collect(&:name)
# The same as people.select |p| p.manager? .collect |p| p.salary
people.select(&:manager?).collect(&:salary)
【讨论】:
你是在暗示它,但最好明确地告诉它:这是 Rails 所做的修改,它不是 Ruby 本身内置的。 @kikito: ruby-doc.org/core-1.9.3/Symbol.html#method-i-to_proc 你是对的 - 我刚刚在普通的 irb (1.8.7) 中尝试过,它在 Ruby 本身中。这不是 Rails 提供的。感谢您纠正我的错误! @kikito:实际上它最初是在 Rails 中实现的,但每个人都喜欢它,所以它进入了核心。 请不要回答重复的问题。只需投票关闭。这个问题已经被问和回答了 17(!!!) 次了,进一步传播知识确实没有任何收获。【参考方案2】:通过在符号前面添加&
,您正在创建一个 lambda 函数,该函数将在传递给此函数的对象上调用具有该符号名称的方法。考虑到这一点:
ar.map(&:reverse)
大致相当于:
ar.map |element| element.reverse
【讨论】:
以上是关于ruby 中“&:”运算符的功能是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在 Ruby 中,“=>”是啥意思,它是如何工作的? [复制]