4

我有以下模块:

type userBuilderType = {
  mutable name: string,
};

module BuilderPattern = {
  let builder () => {
    name: "",
  };
  let setName = fun name => builder.name = name;
  let getName = builder.name;
};

BuilderPattern.setName("Charles");
Js.log(BuilderPattern.getName);

它完成以下工作:

  1. 为 setter 创建类型
  2. 用于设置 + 获取的 builderName 对象此外,我想:
  3. 能够使用 getName 函数上的 JS.log 检索名称

但是,在这种情况下,我得到以下错误:

This is: unit => userBuilderType But somewhere wanted: userBuilderType 

关于我如何正确设置 setter/getter 的任何建议都非常感谢。谢谢你。

4

1 回答 1

2

您的问题中的代码存在许多问题,其中一些问题纯粹是语法问题。github 代码更有意义,但您遇到的主要问题是您没有在任何地方创建数据实例。

我认为这就是您想要的,其中构造了一个实例并将其传递给 getter 和 setter:

type userBuilderType = {
  mutable name: string,
  mutable age: int,
  mutable phone: string,
  mutable address: string
};

module BuilderPattern = {
  let builder () => {
    name: "",
    age: 0,
    phone: "",
    address: ""
  };
  let setName builder name => builder.name = name;
  let getName builder => builder.name;
};

let myBuilder = BuilderPattern.builder ();

BuilderPattern.setName myBuilder "Charles";
Js.log(BuilderPattern.getName myBuilder);

但这似乎也是对您的意图的有效解释,其中状态在全球范围内保存(这通常是一个非常非常糟糕的主意):

type userBuilderType = {
  mutable name: string,
  mutable age: int,
  mutable phone: string,
  mutable address: string
};

module BuilderPattern = {
  let builder = {
    name: "",
    age: 0,
    phone: "",
    address: ""
  };
  let setName name => builder.name = name;
  let getName () => builder.name;
};

BuilderPattern.setName "Charles";
Js.log(BuilderPattern.getName ());

在这两种情况下,问题都归结为以各种方式将采用单个单元参数的函数与仅使用 let 绑定混淆。

于 2017-10-24T21:20:03.950 回答