You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:09:02