Ruby:获取值,如果为true或

时间:2013-02-26 19:04:05

标签: ruby

我可以使用这样的三元运算符:

a.empty? ? a : b

如果a只是一个短变量,那么这是可行的。如果我不想使用变量,但是,例如,我在一个复杂的数组函数链中,我没有临时变量,如何这样做而不必重复链?在我看来,只能使用nil值,我可以使用or

a.filter { bla bla bla }.map { bla bla bla }.reduce { bla bla } || b

但是对于任何其他类型的检查如何做到这一点?

a.filter { bla bla bla }.map { bla bla bla }.reduce { bla bla }.empty? ? a.filter { bla bla bla }.map { bla bla bla }.reduce { bla bla } : b

3 个答案:

答案 0 :(得分:4)

这个问题一再被问到:

a
.filter{bla bla bla}
.map{bla bla bla}
.reduce{bla bla}
.tap{|a| break a.empty? ? a : b}

或者,(不推荐):

a
.filter{bla bla bla}
.map{bla bla bla}
.reduce{bla bla}
.instance_eval{empty? ? self : b}

答案 1 :(得分:2)

您可以将第一部分的值分配给变量,然后在第二部分中使用它:

(temp = a.filter { bla bla bla }.map { bla bla bla }.reduce { bla bla }).empty? ? b : temp

答案 2 :(得分:1)

使用(或复制)active_support a.filter{ bla bla bla } .map { bla bla bla } .reduce{ bla bla } .presence || b 完全定义的presence

{{1}}