原创作者: hideto
阅读:1565次
评论:0条
更新时间:2011-05-26
这次来介绍ActiveSupport里对Symbol的扩展,我们先来看active_support/core_ext/symbol.rb文件:
原来&符号用在symbol前面实际上是调用了to_proc方法,而to_proc里返回一个Proc对象,内部为调用symbol指定的方法
结合例子来说,就是:
即,&:name实际上调用了每个people对象的name方法,这样对对象的任意public方法我们都可以使用&+symbol来调用
class Symbol # Turns the symbol into a simple proc, which is especially useful for enumerations. Examples: # # # The same as people.collect { |p| p.name } # people.collect(&:name) # # # The same as people.select { |p| p.manager? }.collect { |p| p.salary } # people.select(&:manager?).collect(&:salary) def to_proc Proc.new { |*args| args.shift.__send__(self, *args) } end end
原来&符号用在symbol前面实际上是调用了to_proc方法,而to_proc里返回一个Proc对象,内部为调用symbol指定的方法
结合例子来说,就是:
people.map { |p| p.name } 等价于 people.map(&:name)
即,&:name实际上调用了每个people对象的name方法,这样对对象的任意public方法我们都可以使用&+symbol来调用
评论 共 0 条 请登录后发表评论