Ruby: NoMethodError: undefined method `[]' for #<Enumerator:0x007f8683922870>
Ruby: NoMethodError: undefined method `[]' for #<Enumerator:0x007f8683922870>
编辑两个
我注意到在 运行 程序中,它还返回 nil
作为数组中的最后一项。为了解决这个问题,我改变了我的条件。
if array_list.empty? ----> if array_list.length == 1
这个returns数组没有nil
编辑
感谢@mudasobwa 的帮助。
他指出了我的程序的一些错误:一个是我如何使用 [ ] 而不是所需的 ( )
来编写 array.index
还了解到我不应该在方法名称和它的参数之间放置空格。
此处更新了代码,请查看原始代码以了解其变化情况。
list_one = ["apple", "anna", "banana", "peach", "cherry", "kiwi", "pineapple"]
def sort_array(array_list, sorted_array=[])
sorted_array.push(array_list.min)
if array_list.empty? || array_list.nil?
return sorted_array
else
array_list.delete_at(array_list.index(array_list.min))
return sort_array(array_list, sorted_array)
end
end
sort_array(list_one)
如果大家有其他改进或建议,请告诉我。事实上,这个递归函数似乎可以完美地工作,尽管我在未来如何实现递归函数方面还有很多东西要学习。很难让我的大脑围绕它。
编辑结束,原文如下
我正在阅读 Chris Pine 的书《学习编程》,其中一个练习是使用递归排序方法对项目列表进行排序。
这是我的代码:
list_one = ["apple", "anna", "banana", "peach", "cherry", "kiwi", "pineapple"]
def sort_array (array_list, sorted_array=[])
sorted_array = sorted_array
sorted_array.push(array_list.index[array_list.min])
if array_list.empty?
return sorted_array
else
array_list.delete_at(array_list.index[array_list.min])
return sort_array(array_list, sorted_array)
end
end
sort_array (list_one)
现在,Chris 的书要求使用包装函数,我尝试合并它,但在这种情况下没有任何区别。刚刚提出这个问题有点困难 mind-boggler,我需要阅读更多关于递归函数的内容才能达到这一点。
当运行这时,我得到标题中列出的错误。我还没有解决这个问题,所以我希望这里的人可以阐明我可能做错了什么。
如果我合并 Chris 的包装函数:
def sortme (some_array)
sort_array(some_array, [])
end
错误保持不变,考虑到包装函数只是调用 sort_array 函数,这是有道理的。在这种情况下,我真的不认为需要它。
有什么想法吗?为什么会出现此错误?
问题出在这里:
sorted_array.push(array_list.index[array_list.min])
或者使用 Array#index
or Array#[]
:
sorted_array.push(array_list.index(array_list.min))
# or sorted_array.push(array_list[array_list.min])
此代码有两个(或更多)故障:
sorted_array = sorted_array
是空话。你想用它完成什么?
而且,一般来说,从来没有在方法名称和开始它的参数列表的左括号之间放一个 space。在某些情况下,它可能无法按预期工作。
编辑两个
我注意到在 运行 程序中,它还返回 nil
作为数组中的最后一项。为了解决这个问题,我改变了我的条件。
if array_list.empty? ----> if array_list.length == 1
这个returns数组没有nil
编辑 感谢@mudasobwa 的帮助。
他指出了我的程序的一些错误:一个是我如何使用 [ ] 而不是所需的 ( )
来编写 array.index还了解到我不应该在方法名称和它的参数之间放置空格。
此处更新了代码,请查看原始代码以了解其变化情况。
list_one = ["apple", "anna", "banana", "peach", "cherry", "kiwi", "pineapple"]
def sort_array(array_list, sorted_array=[])
sorted_array.push(array_list.min)
if array_list.empty? || array_list.nil?
return sorted_array
else
array_list.delete_at(array_list.index(array_list.min))
return sort_array(array_list, sorted_array)
end
end
sort_array(list_one)
如果大家有其他改进或建议,请告诉我。事实上,这个递归函数似乎可以完美地工作,尽管我在未来如何实现递归函数方面还有很多东西要学习。很难让我的大脑围绕它。
编辑结束,原文如下
我正在阅读 Chris Pine 的书《学习编程》,其中一个练习是使用递归排序方法对项目列表进行排序。
这是我的代码:
list_one = ["apple", "anna", "banana", "peach", "cherry", "kiwi", "pineapple"]
def sort_array (array_list, sorted_array=[])
sorted_array = sorted_array
sorted_array.push(array_list.index[array_list.min])
if array_list.empty?
return sorted_array
else
array_list.delete_at(array_list.index[array_list.min])
return sort_array(array_list, sorted_array)
end
end
sort_array (list_one)
现在,Chris 的书要求使用包装函数,我尝试合并它,但在这种情况下没有任何区别。刚刚提出这个问题有点困难 mind-boggler,我需要阅读更多关于递归函数的内容才能达到这一点。
当运行这时,我得到标题中列出的错误。我还没有解决这个问题,所以我希望这里的人可以阐明我可能做错了什么。
如果我合并 Chris 的包装函数:
def sortme (some_array)
sort_array(some_array, [])
end
错误保持不变,考虑到包装函数只是调用 sort_array 函数,这是有道理的。在这种情况下,我真的不认为需要它。
有什么想法吗?为什么会出现此错误?
问题出在这里:
sorted_array.push(array_list.index[array_list.min])
或者使用 Array#index
or Array#[]
:
sorted_array.push(array_list.index(array_list.min))
# or sorted_array.push(array_list[array_list.min])
此代码有两个(或更多)故障:
sorted_array = sorted_array
是空话。你想用它完成什么?
而且,一般来说,从来没有在方法名称和开始它的参数列表的左括号之间放一个 space。在某些情况下,它可能无法按预期工作。