Dartz库如何获取Either的Left值 有没有更简洁的实现方案
按原逻辑对齐的Left取值实现
原逻辑的核心思路是:先判断Either的类型是否是目标侧,匹配则取值,不匹配则直接将当前侧的值包装后作为返回值返回,完全对齐逻辑的Left取值写法如下:
var newLeft; if(either.isLeft()) { // 是Left时直接提取Left侧的值 newLeft = either.fold((leftVal) => leftVal, (r) => throw UnimplementedError()); } else { // 是Right时直接包装Right侧值返回 return Right(either.getOrElse(() => throw UnimplementedError())); }
更简洁的实现方案
原代码中的UnimplementedError属于完全不会触发的冗余死代码,因为已经提前通过isLeft/isRight做了分支判断,对应分支的异常逻辑永远不会执行。我们可以直接利用Either内置的fold方法的双分支处理能力,去掉多余的判断和异常声明,大幅简化实现:
// 适用场景:方法返回类型为Either<L, R>,当前需要提取Left值继续处理,若为Right则直接返回 return either.fold( (leftVal) { // 此处写拿到Left值后的业务逻辑即可 // 示例:处理后返回对应的Right值 return Right(handleLeftValue(leftVal)); }, // 非Left侧直接返回原值即可,无需额外处理 (rightVal) => Right(rightVal) );
如果只是要提取Left值(方法返回值不需要是Either),写法会更简单:
final leftValue = either.fold((l) => l, (r) => null/* 或自定义默认值/异常逻辑 */);
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

