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

Posted

技术标签:

【中文标题】&: 在红宝石中是啥意思,它是一个混合了符号的块吗? [复制]【英文标题】:what does &: mean in ruby, is it a block mixed with a symbol? [duplicate]&: 在红宝石中是什么意思,它是一个混合了符号的块吗? [复制] 【发布时间】:2012-02-29 14:17:34 【问题描述】:

可能重复:What does map(&:name) mean in Ruby?Ruby/Ruby on Rails ampersand colon shortcut

例如,

contacts.sort_by(&:first_name).

我明白这是做什么的,但我不明白 &: 符号,这是什么意思,它是带有块 (&) 的符号 (:) 吗?我在哪里可以了解更多信息?

【问题讨论】:

这是 *** 上已经提出和回答的不少于 16 个其他问题的副本: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,… …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?。 对不起,信不信由你我搜索了一遍,找不到答案......对不起! 【参考方案1】:

& 在方法调用中的 Proc 对象之前使用时,它将 Proc 视为调用后的普通块。 当 & 在方法调用中在其他类型的对象(在您的情况下为符号 :first_name)之前使用时,它会尝试在该对象上调用 to_proc,如果它没有 to_proc 方法,您将得到TypeError

一般&:first_name&:first_name.to_proc相同。

Symbol#to_proc 返回一个 Proc 对象,它通过 sym 响应给定的方法。

:first_name.to_proc 将返回如下所示的 Proc:

proc  |obj, *args, &block| obj.first_name(*args, &block) 

this Proc 调用对象上原始符号指定的方法作为第一个参数传递,并将所有其余参数 + 块作为此方法参数传递。

再举一个例子:

> p = :each.to_proc
=> #<Proc:0x00000001bc28b0>
> p.call([1,2,3])  |item| puts item+1 
2
3
4
=> [1, 2, 3]

【讨论】:

【参考方案2】:

contacts.sort_by |o| o.first_name相同

它返回一个 Proc 对象,该对象通过 sym 响应给定的方法。

【讨论】:

拒绝回答常见的重复问题。 @Phrogz 那么我应该在回答问题时先搜索吗? @xdazz 尽管这个问题可能已经结束,但无论如何。我不认为人们应该在回答问题之前“搜索”,这肯定会适得其反。 meta post @Kamilski81 - 我和你在一起 - 如果我看到一个我可以回答的问题,我会回答它。我有比先搜索重复项更好的事情要做。更不用说当我完成搜索时,问题上已经存在多个答案了

以上是关于&: 在红宝石中是啥意思,它是一个混合了符号的块吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

波浪号大于 (~>) 在 Ruby gem 依赖项中是啥意思? [复制]

?=> 在 Scala 中是啥意思?

& 是啥意思。 (& 点)在 Ruby 中是啥意思?

>& 在命令中是啥意思? [复制]

JL 在 at&t 语法中是啥意思?

语句“out |= (in & 0x7F) << (bytes++ * 7);”是啥意思?在java中是啥意思?