代码之家  ›  专栏  ›  技术社区  ›  johannes

Ruby中的“&:大写”是什么?

  •  5
  • johannes  · 技术社区  · 16 年前

    我刚读了这个答案 Converting upper-case string into title-case using Ruby .

    下面是代码行

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

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

    3 回复  |  直到 11 年前
        1
  •  6
  •   sepp2k    16 年前

    foo(&a_proc_object) 转动 a_proc_object 然后用那个块调用foo。

    foo(&not_a_proc_object) 电话 to_proc not_a_proc_object 然后返回proc对象 托普罗克 然后用那个块调用foo。

    在Ruby1.8.7+和活动支持中 Symbol#to_proc 定义为返回一个proc,该proc调用由proc参数上的符号命名的方法。

        2
  •  5
  •   Grandpa    16 年前

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

    map(&:capitalize) map { |x| x.capitalize } .

        3
  •  1
  •   Jonathan Feinberg    16 年前

    和号是一种语法糖,它可以用 to_proc 消息。见 http://blog.codahale.com/2006/08/01/stupid-ruby-tricks-stringto_proc/