3

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

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
4

3 回答 3

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}
于 2013-02-26T19:13:14.057 回答
2

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

(temp = a.filter { bla bla bla }.map { bla bla bla }.reduce { bla bla }).empty? ? b : temp
于 2013-02-26T19:09:01.597 回答
1

使用(或复制)精确定义的presenceactive_support

a.filter{ bla bla bla }
 .map { bla bla bla }
 .reduce{ bla bla }
 .presence || b
于 2013-02-26T22:56:13.180 回答