新手问题 &:func 这种用法的正式术语叫什么

tablecell · 2020年08月31日 · 最后由 ericguo 回复于 2020年09月01日 · 1326 次阅读
data1=['bj','sh']
data2=[100,200]

print  data1.map(&:to_sym).zip(data2).to_h 

irb(main):003:0> data1.map {|m| m.to_sym }.zip(data2).to_h
=> {:bj=>100, :sh=>200}

原来是这样的,&:to_sym 是语法糖。

&xxx是一个方法的最后一个参数时,会认为最后一个参数是一个 proc,并调用xxx.to_procxxx转化成 proc data1.map(&:to_sym) 相当于

proc = :to_sym.to_proc
data1.map &proc

任何对象能响应to_proc方法都可以这样写

class X
  def to_proc
    Proc.new { puts "xxxx" }
  end
end

[1, 2, 3].each &X.new
需要 登录 后方可回复, 如果你还没有账号请 注册新账号