我对ruby很新,我对map!
语法的作用感到有点困惑。我在代码库上看到以下行
b.map(&:values).uniq!.map!
b.map(&:values).uniq!
给出了以下输出:
[["us"],
["au"],
["fr"],
["mx"],
["ad",
"ae",
"af",
"al",
"am",
"ao",
"aq"]]
当我在.map!
的末尾添加b.map(&:values).uniq!
时,我得到#<Enumerator: ...>
。我不确定发生了什么。如果有人能向我解释发生了什么,那将是非常有帮助的。
答案 0 :(得分:1)
为
self
的每个元素调用给定的块一次,用块返回的值替换该元素。另见
Enumerable#collect
。如果没有给出阻止,则返回枚举器。
这意味着如果您使用了map!
一个块 - 该数组将使用该块的返回值替换其所有元素:
b.map(&:values).uniq!.map!(&:first)
# => ["us", "au", "fr", "mx", "ad"]
由于你没有添加一个块,你得到一个Enumerator
,就像一个延迟的动作光标,你可以在以后添加你的块:
enum = b.map(&:values).uniq!.map!
enum.each(&:first)
# => ["us", "au", "fr", "mx", "ad"]