【问题标题】:How to create internal value in a module using OCaml/Reason如何使用 OCaml/Reason 在模块中创建内部价值
【发布时间】:2017-10-26 00:29:03
【问题描述】:

我有以下模块:

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. 能够使用 JS.log on getName 函数检索名称

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

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

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

【问题讨论】:

  • 您能否包括您运行的测试,这些测试使您相信未执行更新?
  • 是的,我们会在 6 小时内调查并报告。
  • 哦,我明白了。从一开始就发布类型错误也很有用。在这种情况下,builderName 是一个从unituserBuilderType 的函数。您无法直接访问其字段。如果你改为写let builderName => { ...,它应该可以工作。
  • 这条评论被否决了。像往常一样,我认为评论问题的哪一部分导致您投反对票更有益。我会很乐意整理它。谢谢。
  • 您需要在此处发布您的代码,而不是 GitHub 或任何其他网站。 minimal reproducible example

标签: ocaml mutable reason


【解决方案1】:

您问题中的代码存在许多问题,其中一些问题纯粹是语法问题。 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 绑定混淆。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-25
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
相关资源
最近更新 更多