Я не смог найти разницу между filterOrElse и фильтр или другое
Подпись
filterOrElse
это
inline fun <A, B> EitherOf<A, B>
.filterOrElse(predicate: (B) -> Boolean, default: () -> A): Either<A, B>
и filterOrOther
есть
inline fun <A, B> EitherOf<A, B>
.filterOrOther(predicate: (B) -> Boolean, default: (B) -> A): Either<A, B>
Разница, которую я видел, заключается в том, что filterOrOther
имеет аргумент B
для default
лямбда.
default: (B) -> A vs default: () -> A
Но я думаю, что есть еще одна причина иметь две разные функции. Какова причина? и какая между ними разница?
Если результатом predicate
является false
, filterOrOther
дает вам возможность использовать этот аргумент B
для создания A
с default
. filterOrElse
default
— это просто продюсер, который не использует B
для создания A
.
другими словами, это именно то, что я сказал в вопросе?
В основном да. Важно отметить, что аргумент B
, используемый в predicate
, тот же, что и в default
. По какой-то причине я сказал, что вы можете использовать filterOrElse
, чтобы защитить себя (и/или других коллег по более крупным проектам) от появления странных/хакерских побочных эффектов, вызванных B
в default
лямбде. Это вы говорите: «Использовать B
ТОЛЬКО в predicate
, использование B
в default
— плохая идея по <указать причину>».
Согласно документации, это действительно единственная разница.