【发布时间】:2015-04-05 14:17:40
【问题描述】:
我正在使用递归函数。
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 中有三门课程,例如 ['Science'、'Botany'、'Zoology']。第一次 course 对象将是 Science 对象, course_names 将是 ['Botany', 'Zoology'], course.children 将是 植物学对象。同样它继续执行循环。在最后一个循环 array_course_names 将是空白的,当然是动物学对象,在这种情况下,我想将找到的动物学对象返回给调用函数,但它是 NOT 返回到调用函数,而不是使用 array_course_names 作为 ['Botany', 'Zoology'] 的 else 块,并且由于不存在课程而引发错误“nil 类的未定义方法子项”。满足条件时如何退出递归函数?
【问题讨论】:
-
没有理由不这样做,仔细检查你的变量和条件
-
我已经检查过了。它没有返回课程变量,而是在最后一个循环之后进入 else 部分,课程名称为 [科学,数学]
-
添加
puts "\n###\n array_course_name: #{array_course_name}; array_course_name.blank? : #{array_course_name.blank?}\n###\n" as the first line in theself.get_course_to_be_deleted`方法,运行代码;输出可能会显示逻辑故障的位置。
标签: ruby-on-rails if-statement recursion