将方法传递给Ruby中的Proc

时间:2012-10-02 06:59:49

标签: ruby

在Ruby中,符号可以方便地转换为Proc,例如:

%{john terry fiona}.map(&:capitalize)   # -> %{John Terry Fiona}

有没有办法将方法传递给Proc,以缩短以下代码:

["john", "terry", "fiona"].each do |n|
  assert n.valid_encoding?
end

感谢。

2 个答案:

答案 0 :(得分:5)

%w{john terry fiona}.map(&:valid_encoding?).each(&method(:assert))

答案 1 :(得分:2)

非正统的做法:

Compose = 
  lambda do |*xs|
    ph, *ps = xs.map(&:to_proc)
    lambda do |*ys|
      r = ph[*ys]
      ps.each do |p|
        r = p[r]
      end
      r
    end
  end

["john", "terry", "fiona"].each(&Compose[:valid_encoding?, method(:assert)])