在看镐头书,有一段代码看不明白。
a.map 是将Array 变成了Enumerator, 但是 为什么 a.map(&:upcase) 就可以将枚举里面的所有元素都变成大写了呢?
a.map
a.map(&:upcase)
搞不懂为什么(&:upcase)可以实现这样的功能?
(&:upcase)
a = %w{ a, b, c, d, e } new_array = a.map(&:upcase) # => new_array = [A, B, C, D, E]
&:upcase 等于:upcase.to_proc,可以参考一下 Symbol#to_proc
准确的说应该是&会调用后面的东西的 to_proc 方法。
看这个 http://dreamhead.blogbus.com/logs/10568733.html
http://liuxiang.logdown.com/posts/153625-ruby-magic-symbolto-proc-method
class Foo def bar yield self,"bar" end def to_s(name) "foo: #{name}" end end >> Foo.new.bar(&:to_s) # Foo.new.bar {|obj,name| obj.to_s(name) } => "foo: bar"
#4 楼 @lululau 这篇博文解释的很详细,谢谢!
@piecehealth @Ddl1st @zhangyuan 谢谢楼上诸位!