如何将函数映射到数组的每个元素?

How do I map a function to every element of my array?

我正在使用 Ruby 2.4。如何将复杂函数映射到字符串数组中的每个元素?函数是

elt.gsub!(/\A\p{Space}+|\p{Space}+\z/, '')

假设 "elt" 是我的字符串数组中的一个元素。这是一个美化的 "strip" 功能。我想将它应用于数组中的每个项目。

您要查找的是块语法。

new_arr = arr.map { |elt| elt.gsub(/\A\p{Space}+|\p{Space}+\z/, '') }

大括号内的任何内容都将被视为 map 的 "function"。对于更长的块,您可以使用 do .. end

new_arr = arr.map do |elt|
  elt.gsub(/\A\p{Space}+|\p{Space}+\z/, '')
end

这在语义上是等价的。

如果你知道 .map(&:strip),你可能知道你需要的一切,语法对于 proc 或可能转换为 proc 的任何内容都没有区别(阅读:回复#to_proc.) Symbol 响应 #to_proc,这就是 .map(&:strip) 起作用的原因。 procs 响应 #to_proc,返回自我。就是说,以下内容将完美运行(那里不需要 mapeach 就足够了),因为它使用 banged grep! 来修改所有内容,但为了一致性):

.map(&->(x) { x.gsub!(/\A\p{Space}+|\p{Space}+\z/, '') })