我想在这些对象的类的不同模块中比较不同对象的属性,但出现此错误:
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
答案 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
的东西。