Kaynağa Gözat

Fix predicate bug for any() and no() functions

Billy Barrow 1 yıl önce
ebeveyn
işleme
a61beea43a
1 değiştirilmiş dosya ile 13 ekleme ve 4 silme
  1. 13 4
      src/lib/Enumerable.vala

+ 13 - 4
src/lib/Enumerable.vala

@@ -60,10 +60,11 @@ namespace Invercargill {
             return count;
         }
 
-        public virtual bool any(PredicateDelegate<T> predicate = (i) => true) {
+        public virtual bool any(PredicateDelegate<T>? predicate = null) {
             var result = false;
+            var p = resolve_nullable_predicate(predicate);
             iterate_if(i => {
-                if(predicate(i)) {
+                if(p(i)) {
                     result = true;
                     return false;
                 }
@@ -77,8 +78,9 @@ namespace Invercargill {
             return !any(i => !predicate(i));
         }
 
-        public virtual bool no(PredicateDelegate<T> predicate = (i) => true) {
-            return all(i => !predicate(i));
+        public virtual bool no(PredicateDelegate<T>? predicate = null) {
+            var p = resolve_nullable_predicate(predicate);
+            return all(i => !p(i));
         }
 
         public virtual Enumerable<T> where(owned PredicateDelegate<T> predicate) {
@@ -363,6 +365,13 @@ namespace Invercargill {
             }
         }
 
+        private PredicateDelegate<T> resolve_nullable_predicate(PredicateDelegate<T>? predicate) {
+            if(predicate == null) {
+                return (p) => true;
+            }
+            return predicate;
+        }
+
     }
 
 }