首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails返回到调用函数内部,如果其他块

Rails返回到调用函数内部,如果其他块
EN

Stack Overflow用户
提问于 2015-04-04 14:10:14
回答 1查看 1.4K关注 0票数 0

我使用的是递归函数。

代码语言:javascript
运行
复制
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类的未定义方法子级’,因为不存在任何过程。当满足条件时如何退出递归函数??

EN

回答 1

Stack Overflow用户

发布于 2015-04-04 17:45:35

在执行递归的最后一行中,您提交的是一个数组(由行course_names = array_course_name - [ course_name ]形成),而不是一个字符串。但是,在if array_course_name.blank?的测试中,您测试时就像传递了一个字符串一样。

要么在递归中传递一个字符串,要么更改测试以查看数组是否为空(或者其他一些满足您需要的类似的基本情况),而不是检查字符串是否为blank?

下一步超出了OP的可能范围,但是如果您想同时支持数组和字符串作为第二个参数的类型,则必须为此添加.class/.kind_of?支持。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29447392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档