TypeError:无法将Module1 :: MyClass转换为Integer,在这里找不到错误

时间:2019-10-15 16:36:05

标签: ruby

我想在这些对象的类的不同模块中比较不同对象的属性,但出现此错误:

TypeError:无法将Module1 :: MyClass转换为Integer

我写了attr_reader:value,当我写“ puts array [0] .value”时,一切都正确。问题来自循环:

def best_difference_indices(arr):
    arr_get = arr.__getitem__
    max_get = lambda ijm: ijm[2]

    def _func(start, stop):
        if stop - start <= 1:
            return start, start, 0

        mid = (stop - start) // 2 + start
        left_best = _func(start, mid)
        right_best = _func(mid, stop)

        ci = min(range(start, mid), key=arr_get)
        cj = max(range(mid, stop), key=arr_get)
        cross_best = (ci, cj, arr[cj] - arr[ci])

        return max(left_best, right_best, cross_best, key=max_get)

    i, j, _ = _func(0, len(arr))
    return i, j

1 个答案:

答案 0 :(得分:0)

for x in y循环中,x不是计数器,而是当前迭代中y内的项目。因此,使用@array[i].value实际上就是在进行@array[@array[i].value].value,这会引发类型错误。

您想要执行以下操作:

for a in @array
  if a.value > num2
    num2 = a.value
    j = i # what is this?
  end
end

或者,如果您想使用@array.length.times do |i|作为计数器,也可以使用类似i的东西。