我有以下代码:
def find_animal
animal_type = AnimalKind.find_by(conditions) ||
Animal.find_by(conditions) ||
Breed.find_by(conditions)
end
Run Code Online (Sandbox Code Playgroud)
我想将它重构为:
def find_animal
animals = [AnimalKind, Animal, Breed]
animal_type = animals.first_not_nil { |m| m.find_by(conditions) }
end
Run Code Online (Sandbox Code Playgroud)
关于如何实现first_not_nil方法的任何想法?
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |