Rails宝典之第六式: Symbol to Proc

这次来介绍ActiveSupport里对Symbol的扩展,我们先来看active_support/core_ext/symbol.rb文件: 
Java代码   收藏代码
  1. class Symbol  
  2.   # Turns the symbol into a simple proc, which is especially useful for enumerations. Examples:  
  3.   #  
  4.   #   # The same as people.collect { |p| p.name }  
  5.   #   people.collect(&:name)  
  6.   #  
  7.   #   # The same as people.select { |p| p.manager? }.collect { |p| p.salary }  
  8.   #   people.select(&:manager?).collect(&:salary)  
  9.   def to_proc  
  10.     Proc.new { |*args| args.shift.__send__(self, *args) }  
  11.   end  
  12. end  

原来&符号用在symbol前面实际上是调用了to_proc方法,而to_proc里返回一个Proc对象,内部为调用symbol指定的方法 
结合例子来说,就是: 
Java代码   收藏代码
  1. people.map { |p| p.name }  
  2. 等价于  
  3. people.map(&:name)  

即,&:name实际上调用了每个people对象的name方法,这样对对象的任意public方法我们都可以使用&+symbol来调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值