Ruby中的`&:capitalize'究竟是什么?

joh*_*nes 5 ruby syntax

我刚读了这个答案使用Ruby将大写字符串转换为title-case.

有以下代码行

"abc".split(/(\W)/).map(&:capitalize).join
Run Code Online (Sandbox Code Playgroud)

到底是&:capitalize什么?在我把它变成irb之前,我会告诉你,这不是有效的ruby语法.它必须是某种Proc对象,因为Array#map正常需要一个块.但事实并非如此.如果我把它单独放入irb,我会得到syntax error, unexpected tAMPER.

sep*_*p2k 6

foo(&a_proc_object)变成a_proc_object一个块并用该块调用foo.

foo(&not_a_proc_object)调用to_procnot_a_proc_object,然后转向通过返回的PROC对象to_proc成块和与该块调用foo.

在ruby 1.8.7+中,Symbol#to_proc定义了活动支持以返回一个proc,该proc调用由proc的参数上的符号命名的方法.


Gra*_*dpa 5

它是Symbol#to_proc:见http://pragdave.pragprog.com/pragdave/2005/11/symbolto_proc.html

map(&:capitalize)与...完全相同map { |x| x.capitalize }.