Ruby 什么是回报?一个街区能有什么?

Ruby 什么是回报?一个街区能有什么?,ruby,enumerable,Ruby,Enumerable,在代码中,海洋代表海底山脉的高度。亚特兰蒂斯是一组不同位置的坐标。我想总结一下亚特兰蒂斯提到的山脉的高度 require 'matrix' Ocean=Matrix[ [3,1,4,4,6,2,8,12,8,2], [6,2,4,13,25,21,11,22,9,3,], [6,20,27,34,22,14,12,11,2,5], [6,28,17,23,31,18,11,9,18,12], [9,18,11,13,8,9,

在代码中,海洋代表海底山脉的高度。亚特兰蒂斯是一组不同位置的坐标。我想总结一下亚特兰蒂斯提到的山脉的高度

require 'matrix'    
Ocean=Matrix[ [3,1,4,4,6,2,8,12,8,2],
        [6,2,4,13,25,21,11,22,9,3,],
        [6,20,27,34,22,14,12,11,2,5],
        [6,28,17,23,31,18,11,9,18,12],
        [9,18,11,13,8,9,10,14,24,11],
        [3,9,7,16,9,12,28,24,29,21],
        [5,8,4,7,17,14,19,30,33,4],
        [7,17,23,9,5,9,22,21,12,21,],
        [7,14,25,22,16,10,19,15,12,11],
        [5,16,7,3,6,3,9,8,1,5] ]

atlantis=[[2,3],[3,4]]




puts atlantis.inject {|sum, n| sum + Ocean[n(0),n(1)]}
由于亚特兰蒂斯是一个数组数组,n(0)应该指第一次执行块时第一个数组[2,3]的第一个元素2。但是我得到的错误

t1.rb:15:in
block-in:main:Object(NoMethodError)的未定义方法
从t1.rb:15:in
each'
从t1.rb:15:in
inject' 从t1.rb:15:in`'

似乎表明它甚至不知道“n”是什么。我错过了什么?在这种情况下,n究竟代表什么?

从Ruby中,该函数返回对种子和每个连续值重复应用给定二进制运算符的结果。因此,返回值应该是块过程(或符号)返回的类型的对象。在您的例子中,块最终使用带有数字参数的
+
运算符,因此返回的值应该是数字

您应该通过提供种子值并使用正确的数组查找语法来修改尝试:

atlantis.injection(0){| sum,n | sum+Ocean[n[0],n[1]]}
因此,您的通话顺序如下所示:

#sum=seed=0(from.inject(0))
#总和=总和+海洋[亚特兰蒂斯[0][0],亚特兰蒂斯[0][1]]=34
#总和=总和+海洋[亚特兰蒂斯[1][0],亚特兰蒂斯[1][1]]=34+31
#总和=65

对数组元素引用使用方括号
[]
,而不是括号,例如
海洋[n[0],n[1]]
。添加折叠的设置起始值:
注入(0)