gpt4 book ai didi

ruby - 在 Ruby 中,返回 'enumerable' 是什么意思

转载 作者:数据小太阳 更新时间:2023-10-29 07:33:50 26 4
gpt4 key购买 nike

我试图理解以下 Ruby 代码:

digits.each_with_index.inject(0) do |decimal, (digit, index)|
decimal + digit * 2**index
end

(作为引用,digits 是一种返回数组的方法,其中每个元素都是一个整数)。

令我困惑的代码部分是.each_with_index.inject(0)。我知道 each_with_index 方法的作用,我也知道 inject 方法的作用,但我不确定这两者的链接是如何工作的。究竟是怎么回事?

我试图查看 each_with_index 的文档,我猜我遇到问题的部分如下:“如果没有给出 block ,则返回一个枚举数。”

我想所有这些归结起来就是,什么是枚举器?

最佳答案

Enumerable 是您可以循环访问的对象。它包含在数组、集合等中。

来自文档:http://ruby-doc.org/core-2.2.2/Enumerable.html

The Enumerable mixin provides collection classes with several traversal and searching methods, and with the ability to sort. The class must provide a method each, which yields successive members of the collection. If Enumerable#max, #min, or #sort is used, the objects in the collection must also implement a meaningful <=> operator, as these methods rely on an ordering between members of the collection.

枚举器是您稍后可以用来迭代的东西: http://ruby-doc.org/core-2.1.5/Enumerator.htmlEnumerator,是一个包装类,包含了 Enumarable 的所有方法

在您的示例代码中,您将默认值 0 注入(inject)到 each_with_index 循环中,因此在第一个循环中 decimal 等于 0,digit 是数组的第一个值,并且index 为 0。第二次循环时,decimal 设置为第一次返回值,digit 是你的第二个数组值,index 为 1。

例如:

digits = [20,30,40]

循环中的第一次:十进制 = 0,数字 = 20,索引 = 0。然后返回 20。

循环中的第二次:十进制 = 20,数字 = 30,索引 = 1。然后返回 80。

第三次循环:decimal = 80,digit = 40,index =2。然后返回 240。

所以这个 block 返回 240。

关于ruby - 在 Ruby 中,返回 'enumerable' 是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29826311/

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