我正在学习rails并遵循this thread.我被to_proc法困住了.我认为符号仅仅是字符串的替代品(它们就像字符串,但在内存方面更便宜).如果我还缺少什么符号,请告诉我.请用简单的方式解释to_proc的含义和用途.

推荐答案

有些方法采用块,并且这种模式经常出现在块中:

{|x| x.foo}

人们希望用更简洁的方式来写.为了做到这一点,他们结合使用了符号、方法Symbol#to_proc、隐式类转换和&运算符.如果将&放在参数位置的Proc实例前面,将被解释为一个块.如果将Proc实例以外的其他对象与&组合,则隐式类转换将try 使用在该对象上定义的to_proc方法(如果有)将其转换为Proc实例.对于Symbol实例,to_proc的工作方式如下:

:foo.to_proc # => ->x{x.foo}

例如,假设你写:

bar(&:foo)

&运算符与:foo结合,:foo不是Proc实例,因此隐式类cast对其应用Symbol#to_proc,得到->x{x.foo}.&现在适用于此,并被解释为一个块,它给出:

bar{|x| x.foo}

Ruby相关问答推荐

RSpec:为什么 `instance_double` 可以与 StandardError 一起使用,但不能与其他异常类一起使用?

当一个方法在没有参数的 return 关键字上提前退出时,返回什么值?

Ruby反斜杠在新行上继续字符串?

Jekyll 默认安装没有 _layouts 目录

Nokogiri/Xpath 命名空间查询

在 RSpec-2.11 中使用隐含的 `subject` 和 `expect`

osx bash上的树命令

如何将 STDOUT 捕获到字符串?

格式化 Ruby 的漂亮打印

Sinatra 是多线程的吗?

在 Ruby 中定义 [方括号] 方法是如何工作的?

如何获取符号链接的目标?

ruby module_function 与包含模块

获取下周一(或一周中的任何一天)的日期的 Ruby 代码

如何在不使用循环的情况下按数组中的计数分组

在 Ruby 中查找内存泄漏的原因

rbenv install --list 不列出 2.1.2 版本

Ruby 删除目录

Ruby 哈希白名单过滤器

Ruby:如何计算一个字符串在另一个字符串中出现的次数?