“和”到底是什么在Ruby中大写?

“和”到底是什么在Ruby中大写?,ruby,syntax,Ruby,Syntax,我刚刚读了这个答案 下面是一行代码 "abc".split(/(\W)/).map(&:capitalize).join 什么是&:capitalize?在我自己将其放入irb之前,我会告诉你,它不是有效的ruby语法。它一定是某种Proc对象,因为Array\mapnormaly需要一个块。但事实并非如此。如果我把它单独放在irb中,我会得到语法错误,意外篡改符号是一种语法糖,它通过to_proc消息生成大量代码。请参阅这是Symbol#to_proc:请参阅 map(&:capit

我刚刚读了这个答案

下面是一行代码

"abc".split(/(\W)/).map(&:capitalize).join

什么是
&:capitalize
?在我自己将其放入irb之前,我会告诉你,它不是有效的ruby语法。它一定是某种
Proc
对象,因为
Array\map
normaly需要一个块。但事实并非如此。如果我把它单独放在irb中,我会得到
语法错误,意外篡改
符号是一种语法糖,它通过
to_proc
消息生成大量代码。请参阅这是
Symbol#to_proc
:请参阅

map(&:capitalize)
map{x|x.capitalize}
foo(&a|u proc_对象)
a|u proc_对象
转换为一个块,并用该块调用foo

foo(¬\u a\u proc\u object)
not\u proc\u object
上调用
到\u proc
,然后将
返回到\u proc
的proc对象转换为一个块,并使用该块调用foo


在ruby 1.8.7+中,active support
Symbol#to_proc
被定义为返回一个proc,该proc调用参数中以符号命名的方法。

它在irb中不起作用的原因可能是,正如sepp2k所说,它只被烘焙到ruby 1.8.7中的标准库中,我猜你运行的是早期版本。不过,您经常会看到它,因为ActiveSupport也提供了它,而ActiveSupport附带了Rails。如果您在Rails的脚本/控制台中尝试它,您可能会发现它是有效的。它的可能副本并不完全相同,因为前者会影响性能。