这个&符号是啥意思? [复制]
Posted
技术标签:
【中文标题】这个&符号是啥意思? [复制]【英文标题】:What does this ampersand mean? [duplicate]这个&符号是什么意思? [复制] 【发布时间】:2012-11-03 04:48:05 【问题描述】:可能重复:What does map(&:name) mean in Ruby?What do you call the &: operator in Ruby?
只是看一些 railscast 并看到这样的代码:
[Category, Product, Person].each(&:delete_all)
我知道它会擦除这些模型的所有记录,但我不知道这个 &:delete_all
是什么意思。
【问题讨论】:
这是 *** 上已经提出和回答的不少于 20 个其他问题的副本: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,…
……Ruby map method syntax question,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?,……
…what is the functionality of “&:
” operator in ruby? 和 What does “temps.each(&:valid?)
” mean in Ruby?。
【参考方案1】:
它基本上是这个的简写:
[Category, Product, Person].each |e| e.delete_all
也就是说,它向迭代器的每个元素发送delete_all
。
【讨论】:
【参考方案2】:&:delete_all 基本上翻译成 |obj| obj.delete_all。 & 号在循环上的当前对象上调用 to_proc。
【讨论】:
【参考方案3】:当您将Proc
对象pr
和&
放在最后一个参数位置时,例如:
some_method(&pr)
然后,对应于pr
的块将被传递给some_method
。如果对象non_pr
不是Proc
,则给出如下:
some_method(&non_pr)
然后,non_pr
将被to_proc
隐式转换为Proc
。
例如,当non_pr
是Symbol
时,将应用Symbol#to_proc
,恰好是这样的:
class Symbol
def to_proc
proc|obj, *args| obj.send(self, *args)
end
end
尤其是 each(&:delete_all)
,:delete_all.to_proc
将返回 Proc
对象:
proc|obj, *args| obj.delete_all(*args)
所以相应的块将像这样传递给each
:
each|obj, *args| obj.delete_all(*args)
注意到Enumerable#each
的块的元数为一,简化为:
each|obj| obj.delete_all
【讨论】:
以上是关于这个&符号是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章