Ruby代码“&:”在这里做什么

时间:2017-04-15 01:36:15

标签: ruby

def reverse_words(s)
    s.split.map(&:reverse).join(' ')
end

此代码会反转句子中的每个单词。但我不明白代码中的“&:”。有人可以向我解释一下吗?

2 个答案:

答案 0 :(得分:1)

map期望一个带有一个参数的代码块。你通常做的是在该论点上调用reverse:

map {|elt| elt.reverse }

使用&语法,您可以将其缩短为

map(&:reverse)

冒号用于在名称reverse之外创建一个符号。

答案 1 :(得分:0)

&表示reverse正在引用一个函数,而不是一个块。

此方法假定调用者将传递一个String对象。

  1. 首先,方法#split将空格上的字符串放入数组中(如果字符串没有空格,则会创建一个以字符串为唯一元素的数组)
  2. 在新阵列上调用Array#map方法,并向其传递对String#reverse方法的引用。
  3. &告诉map方法输入是对方法的引用而不是标准块