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_proc把xxx转化成 proc data1.map(&:to_sym) 相当于
&xxx
xxx.to_proc
xxx
data1.map(&:to_sym)
proc = :to_sym.to_proc data1.map &proc
任何对象能响应to_proc方法都可以这样写
to_proc
class X def to_proc Proc.new { puts "xxxx" } end end [1, 2, 3].each &X.new
&:func 这种用法叫:Conversion of other objects to procs