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

tablecell · August 31, 2020 · Last by ericguo replied at September 01, 2020 · 1324 hits
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
You need to Sign in before reply, if you don't have an account, please Sign up first.