我使用的是递归函数。
def abc
get_course_to_be_deleted( courses, array_course_name, nil )
end
def self.get_course_to_be_deleted( courses, array_course_name, course )
if array_course_name.blank?
#### array_course_name = []
course
else
#### array_course_name = ['Science', 'Maths']
array_course_name.each do |course_name|
course = courses.detect{ |course| course.name == course_name }
course_names = array_course_name - [ course_name ]
get_course_to_be_deleted( course.children, course_names, course )
end
end结束
试过.empty?不起作用!array_course_name总是一个数组,假设我在array_course_names上有三门课:“科学”、“植物学”、“动物学”。第一次课程对象将是科学对象,course_names将是‘植物学’,‘动物学’,course.children将是植物学对象。正如它继续执行loop.At一样--上一个周期的array_course_names将为空白,过程将是动物学对象,在这种情况下,我希望将已找到的动物学对象返回到调用函数,但是NOT被返回到调用函数,而是以array_course_names作为‘植物学’、‘动物学’的形式进入其他块,这会抛出一个错误‘no类的未定义方法子级’,因为不存在任何过程。当满足条件时如何退出递归函数??
发布于 2015-04-04 17:45:35
在执行递归的最后一行中,您提交的是一个数组(由行course_names = array_course_name - [ course_name ]形成),而不是一个字符串。但是,在if array_course_name.blank?的测试中,您测试时就像传递了一个字符串一样。
要么在递归中传递一个字符串,要么更改测试以查看数组是否为空(或者其他一些满足您需要的类似的基本情况),而不是检查字符串是否为blank?。
下一步超出了OP的可能范围,但是如果您想同时支持数组和字符串作为第二个参数的类型,则必须为此添加.class/.kind_of?支持。
https://stackoverflow.com/questions/29447392
复制相似问题