有没有更直接的方法来做到这一点?
[1, nil, 2, 'a'].all? {|x| x}
使用include?
并在开头添加“非”:
![1, nil, 2, 'a'].include?(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)