d的构造器库

原文
库地址

A a = new A();
a.setName("Bob");
a.setAge(20);
a.isProbation(false);
a.isActive(true);
...

这样构造太冗余.

A a = new A("Bob", 20, false, true);

而如上多参构造无标记,易搞混顺序,或含义不清楚
本库,允许这样:

class A {
  string name;
  int age;
  bool isProbation;
  bool isActive;

  mixin AddBuilder!(typeof(this));
}

A a = A.builder()
  .name("Bob")
  .age(20)
  .isProbation(false)
  .isActive(true)
  .build();

此工具允许单式构造,及清楚标记参数,还可完全不必写构造器.

如何扩展builder方法呢?
自动生成构建器方法的,并在类中沿继承链上移,来取所有字段(假定你说的"扩展"指的是继承?)
下面是其中一个单元测试:

class A2 {
  int a;
  string b;
}

class B2 : A2 {
  int c;

  mixin AddBuilder!(typeof(this));
}

//应该可从`生成器`取得,所有继承`字段`
unittest {
  B2 b2 = B2.builder()
      .a(3)
      .b("ham")
      .c(4)
      .build();

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