关于ruby:了解[ClassOne,ClassTwo] .each(&:my_method)

关于ruby:了解[ClassOne,ClassTwo] .each(&:my_method)

Understanding [ClassOne, ClassTwo].each(&:my_method)

本问题已经有最佳答案,请猛点这里访问。

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

我正在看一个栏杆广播,看到了这段代码。

1
[Category, Product].(&:delete_all)

关于清除数据库。

我问了IRC中的电话,并被告知

1
(&:delete_all)

是捷径

1
{|model| model.delete_all}

我用以下方法测试了

1
2
3
4
5
6
7
8
9
10
11
12
13
class ClassOne
  def class_method
    puts 1
  end
end

class ClassTwo
  def class_method
    puts 2
  end
end

[ClassOne, ClassTwo].each(&:class_method)

我收到一条错误消息,说

1
Wrong Argument type Symbol (expected Proc)

我也试过

1
2
3
4
one = ClassOne.new
two = ClassTwo.new

[one, two].each(&:class_method)

但这仍然失败。

如果我将其修改为阅读

1
[one, two].each{|model| model.class_method}

一切都按预期进行。

那么,&:delete_all实际上是做什么的呢? 文档说delete_all是一种方法,所以我对这里发生的事情感到困惑。


这依赖于可以在1.8中完成的Ruby 1.9扩展,包括以下内容:

1
2
3
4
5
class Symbol
    def to_proc
      proc { |obj, *args| obj.send(self, *args) }
    end
end

我相信Rails在ActiveSupport中对此进行了定义。


这是Ruby的一些Rails特定补丁,即proc的符号。


推荐阅读

    linux下访问网页命令?

    linux下访问网页命令?,网络,系统,信息,工具,环境,平台,传播,服务,发行,咨询,L

    linux下命令访问服务?

    linux下命令访问服务?,服务,密码,状态,信息,地址,网络,认证,系统,号码,名称,l

    linux访问根目录命令?

    linux访问根目录命令?,系统,位置,一致,公司,财务,设备,命令,根目录,传播,密

    linux访问连接命令?

    linux访问连接命令?,系统,地址,网络,密码,服务,软件,位置,对外,处分,命令,怎

    linux访问域名的命令?

    linux访问域名的命令?,地址,网络,信息,管理,网址,服务,命令,数据,网站,系统,l

    linux访问网址命令?

    linux访问网址命令?,地址,网络,系统,手机,设备,信息,网址,命令,首次,管理,lin

    linux命令下访问页面?

    linux命令下访问页面?,系统,数据,传播,网址,环境,密码,信息,地址,软件,工作,l

    linux访问网站的命令?

    linux访问网站的命令?,地址,系统,服务,工作,网站,命令,网络,管理,信息,网址,L

    linux访问模板命令?

    linux访问模板命令?,工作,地址,系统,信息,管理,命令,目录,发行,设备,文件,lin

    命令访问linux系统?

    命令访问linux系统?,系统,地址,信息,软件,命令,时间,工具,网络,管理,电脑,lin

    linux命令访问网页?

    linux命令访问网页?,地址,传播,网络,系统,软件,网址,密码,服务,数据,首次,lin

    linux访问日志的命令?

    linux访问日志的命令?,系统,信息,对比,实时,基础,日志,命令,文件,设备,管理,l

    linux网页访问命令?

    linux网页访问命令?,地址,网络,工作,系统,命令,传播,信息,软件,代码,首次,在L

    linux访问日志命令?

    linux访问日志命令?,系统,信息,对比,日志,简介,管理,情况,实时,命令,文件,查

    linux访问d盘命令?

    linux访问d盘命令?,系统,管理,电脑,设备,软件,概念,信息,分区,文件,命令,...6

    linux文件访问命令行?

    linux文件访问命令行?,系统,地址,工作,图片,命令,标准,名称,情况,官方网站,

    linux客户访问命令?

    linux客户访问命令?,网络,系统,地址,服务,管理,信息,数字,基础,密码,命令,Lin

    linux访问路径命令?

    linux访问路径命令?,工作,系统,名称,地址,信息,命令,工具,名字,目录,文件,在l

    linux访问磁盘命令?

    linux访问磁盘命令?,系统,情况,地址,命令,信息,服务,工作,设备,工具,第三,lin

    linux访问命令缩写?

    linux访问命令缩写?,工作,系统,地址,汽车,服务,网络,管理,命令,信息,目录,Lin