当前位置:  开发笔记 > 编程语言 > 正文

返回与相同函数分离的第一个truthy值

如何解决《返回与相同函数分离的第一个truthy值》经验,为你挑选了1个好方法。

我有以下代码:

def find_animal
  animal_type = AnimalKind.find_by(conditions) ||
                Animal.find_by(conditions) ||
                Breed.find_by(conditions)
end

我想将它重构为:

def find_animal
  animals = [AnimalKind, Animal, Breed]
  animal_type = animals.first_not_nil { |m| m.find_by(conditions) } 
end

关于如何实现first_not_nil方法的任何想法?



1> pdobb..:

Enumerable#detect将短路并返回块返回truthy值的第一个对象.但它没有返回价值的结果(正如Oleskar Verhun所指出的那样).因此,您可以将结果存储在循环外部的变量中,如下所示:

animal = nil
[AnimalKind, Animal, Breed].detect { |klass| 
  animal = klass.find_by(conditions) 
}

animal # will be nil or the first animal found by the supplied conditions


这将找到类,但问题中的问题是找到特定模型类的记录,这意味着你还需要在最后添加`find_by(conditions)`.
推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有