gpt4 book ai didi

arrays - 使用一个或两个 block 参数调用 `Hash#map`

转载 作者:数据小太阳 更新时间:2023-10-29 08:30:40 25 4
gpt4 key购买 nike

entries 是一个 Hash:

entries = { foo: 1, bar: 2 }

这是我熟悉的语法:

entries.map { |key, val| "#{key} #{val}" }
#=> ["foo 1", "bar 2"]

这是我在教程中遇到的语法:

entries.map { |key_val| "#{key_val.first} #{key_val.last}" }
#=> ["foo 1", "bar 2"]

我是 Ruby 的新手,所以令我惊讶的是这两种语法竟然都有效。我的问题是:

  1. 这两者有什么区别吗?

  2. 为什么这样做 - 是因为哈希表对象以两种不同的方式实现了 Enumerable 接口(interface)(它提供了 map 方法)吗?

最佳答案

不,它与哈希和可枚举无关(好吧,几乎)。我称之为“数组解构”。 Ruby 有一种拆分数组的好方法。假设你有这个二元数组

ary = [1, 2]

您可以通过单独访问它们来获取它的元素

a = ary.first # or ary[0]
b = ary.last # or ary[-1]

或者您可以通过将数组直接分配给变量来“解构”数组

a, b = ary

a 将是数组的第一个元素,b - 第二个(在这种特殊情况下也是最后一个)。

同样的事情发生在你的例子中。 Enumerable 的 each(这是 map 调用的内容)在散列上使用时,会生成包含两个元素的数组,一个键及其值。

现在,如果 block 只有一个参数,那就是那个数组。如果它有两个,你的阵列将被拆开。

是的,更喜欢第一种方法。更具可读性。

关于arrays - 使用一个或两个 block 参数调用 `Hash#map`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37915516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com