这个&符号是啥意思? [复制]

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 does map(&: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_prSymbol 时,将应用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

【讨论】:

以上是关于这个&符号是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

这个符号在 C++ 中是啥意思? [复制]

字符串文字前的符号“@”是啥意思? [复制]

C#中变量名前的@符号是啥意思? [复制]

数组中的“...”(三点)符号是啥意思? [复制]

Python 方法签名中的 ->(破折号大于箭头符号)是啥意思? [复制]

&: 在红宝石中是啥意思,它是一个混合了符号的块吗? [复制]