&: 在红宝石中是啥意思,它是一个混合了符号的块吗? [复制]
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 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?。
对不起,信不信由你我搜索了一遍,找不到答案......对不起!
【参考方案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 - 我和你在一起 - 如果我看到一个我可以回答的问题,我会回答它。我有比先搜索重复项更好的事情要做。更不用说当我完成搜索时,问题上已经存在多个答案了以上是关于&: 在红宝石中是啥意思,它是一个混合了符号的块吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章