d需要外部上下文

原文

我遇到了意想不到问题,它似乎只发生在单元测试中,而不是单元测试外.

unittest {
  class Ab {
    int a;
    string b;

    static class Builder {
      int _a;
      string _b;
      Builder a(int a) {
        _a = a;
        return this;
      }
      Builder b(string b) {
        _b = b;
        return this;
      }
      Ab build() {
        Ab t = new Ab();
        t.a = _a;
        t.b = _b;
        return t;
      }
    }
  }

  Ab ab = new Ab.Builder()
      .a(1)
      .b("ham")
      .build();
  assert(ab.a == 1);
  assert(ab.b == "ham");
}

这将无法编译,并出现以下错误:需要外部环境指针.
但是,如果移动类定义到unittest块之外,那么一切都可正常工作:

class Ab {
  int a;
  string b;

  static class Builder {
    int _a;
    string _b;
    Builder a(int a) {
      _a = a;
      return this;
    }
    Builder b(string b) {
      _b = b;
      return this;
    }
    Ab build() {
      Ab t = new Ab();
      t.a = _a;
      t.b = _b;
      return t;
    }
  }
}

unittest {
  Ab ab = new Ab.Builder()
      .a(1)
      .b("ham")
      .build();
  assert(ab.a == 1);
  assert(ab.b == "ham");
}

为什么只在单元测试声明类时,才有该错误?

单元测试只是可运行代码并具有局部变量特殊函数.
它内部声明的类和结构调用外部函数上下文来,访问这些局部上下文.
外部类标记为"静",就可去掉该错误.

posted @   zjh6  阅读(13)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示