Ruby & 冒号快捷方式

标签 ruby

<分区>

Possible Duplicate:
What does map(&:name) mean in Ruby?

在 Ruby 中,我知道如果我这样做:

some_objects.each(&:foo)

这是一样的

some_objects.each { |obj| obj.foo }

也就是说,&:foo 创建 block { |obj| obj.foo },把它变成一个Proc,然后传递给每个。为什么这行得通?这只是 Ruby 的特例,还是它能正常工作的原因?

最佳答案

可以这么说,你的问题是错误的。这里发生的不是“& 符号和冒号”,而是“& 符号和对象”。在这种情况下,冒号代表符号。所以,有 &:foo

& 调用对象上的to_proc,并将其作为 block 传递给方法。在 Ruby 中,to_proc 是在 Symbol 上实现的,所以这两个调用是等价的:

something {|i| i.foo }
something(&:foo)

因此,总结一下:& 调用对象上的to_proc 并将其作为 block 传递给方法,Ruby 实现了to_proc符号上。

关于Ruby & 冒号快捷方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1961030/

相关文章:

ruby - 如何解决 ruby​​ 中的名称冲突

sql - 如何使用事件记录计算 has_many 关系?

ruby - 在 Linux 中编写 Openoffice 脚本

ruby-on-rails - 在 Ruby 中打开文件返回空文件

Ruby 的 def 和 instance_eval 与 class_eval

Ruby 音频库

ruby-on-rails - Rails 按键对哈希数组进行分组

ruby-on-rails - 替换 ActiveRecord 5 中的 ActiveRecord::ConnectionAdapters::ConnectionManagement

ruby - 收集和每个之间的明显区别?

ruby-on-rails - Devise - 确认后重定向到重发确认指令页面