これを行うより直接的な方法はありますか?
[1, nil, 2, 'a'].all? {|x| x}
include?
先頭に「not」を使用して追加します。
![1, nil, 2, 'a'].include?(nil)
すべての要素が非 nil の場合、配列には が含まれませんnil
。使用.all?
すると、配列全体をスキャンする.include?
必要があり、一致が見つかったらすぐに停止する必要があり、ブロックを呼び出すオーバーヘッドはありません。そのため、より高速に.include?
なるはずですが、大規模な配列がない限り、パフォーマンスの違いはおそらくほとんど関係ありません. 私はあなたに最も適した方を選びます。
ゴルフをしていますか?
それはあなたが得ようとしているのと同じくらい短くて直接的です. 個人的には、もう少し冗長な方法を好みます。
[...].all? {|x| !x.nil? }
私はあなたができると思います::
!list.any?(&:nil?)
しかし、私はそれがあなたの元のコードよりも直接的ではないと思います。ただし、文字数は少なくなります。ブロックが気に入らない場合は、&:symbolでブロックが非表示になります。
[まあ、あなたの元のコードには{|x|という問題があります x}は、nil値とfalse値の両方でfalseと評価されます。本当にブロックが必要な場合{|x| !x.nil?}]
mu とほぼ同じですが、短すぎます。私のものはそれよりも優れているとは思いませんが、別の変形です。
![1, nil, 2, 'a'].index(nil)