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

最初の部分の値を変数に代入してから、2 番目の部分で使用できます。

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

presenceこれを正確にactive_support定義する使用(またはコピー) :

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