gpt4 book ai didi

ruby - 这个 #divmod 方法正在做什么来输出这个结果?

转载 作者:行者123 更新时间:2023-12-03 07:55:37 25 4
gpt4 key购买 nike

我有两个数组:

a = [7, 1, 65, 4, 13, 97]
b = []

并且我尝试通过以下代码将每个 a 元素的 #divmod 返回值附加到 b 中:

b << a.map(&4.method(:divmod))

我期望的结果是:

b = [[1, 3], [0, 1], [16, 1], [1, 0], [3, 1], [24, 1]]

但我得到的是:

b = [[[0, 4], [4, 0], [0, 4], [1, 0], [0, 4], [0, 4]]]

我不明白为什么。谁能解释一下我不明白的地方?

(我必须使用 &: 因为我需要使用此代码作为方法 block 参数。)

最佳答案

您得到的结果有两个问题:

  1. 你得到的数组有一个额外的嵌套层
  2. (内部)值不符合预期

要修复 (1),您必须分配 map 的结果。而不是附加结果,即

b = a.map(...)

关于(2),您的代码相当于:

a.map { |n| 4.divmod(n) }
#=> [[0, 4], [4, 0], [0, 4], [1, 0], [0, 4], [0, 4]]

您想要的:(请注意,n4 现在已交换)

a.map { |n| n.divmod(4) }
#=> [[1, 3], [0, 1], [16, 1], [1, 0], [3, 1], [24, 1]]

I'm having to use &: because I need to use this code as a method argument

我不确定你的意思,但是如果你不想有一个显式的 block 参数,你可以用 & 传递一个 proc 或 lambda相反:

divmod4 = ->(n) { n.divmod(4) }

b = a.map(&divmod4)
#=> [[1, 3], [0, 1], [16, 1], [1, 0], [3, 1], [24, 1]]

但是,自从 &divmod4convert the proc to a block argument ,上面相当于调用a.map { |n| n.divmod(4) }直接地。仅当您想重用该过程时才需要这种方法,例如将其传递给不同的方法。

关于ruby - 这个 #divmod 方法正在做什么来输出这个结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76109199/

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