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

如何在Dart中通过递归方法计算整数类型的对象深度?

解决Dart递归对象深度计算的编译错误

问题分析

你的代码编译错误是因为三元表达式的类型被Dart推断为num(尽管两个分支都是int),导致1 + num的结果类型为num,无法匹配depth getter声明的int返回类型。

正确实现方式

方案1:使用代码块式getter(推荐)

这种写法逻辑清晰,完全避免类型推断问题:

class MyNode {
  MyNode? parent;
  
  int get depth {
    if (parent == null) {
      return 0; // 根节点深度为0
    }
    // 非空断言!确保parent不为null,因为已经通过if判断
    return 1 + parent!.depth;
  }
}

方案2:修复三元表达式的类型问题

如果偏好单行写法,可以通过调整逻辑结构消除类型歧义:

class MyNode {
  MyNode? parent;
  
  int get depth => (parent == null) ? 0 : 1 + parent!.depth;
}

这里直接调整了逻辑:根节点直接返回0,子节点返回1加上父节点的深度,避免了原写法中1 + (-1)的类型推断隐患,同时通过parent!明确告知编译器parent不为null。

验证效果

  • 根节点(parent为null):返回0,符合预期
  • 根节点的子节点:返回1,符合预期
  • 更深层级的节点:递归返回正确的深度值

内容的提问来源于stack exchange,提问作者Jemolah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 23:53:18