2

我试图弄清楚为什么使用Js.Promise示例

Js.Promise.(
    ...
)

而使用Json.Decode示例

Json.Decode.{
    ...
}

据我了解,.()打开了Js.Promise这样我就可以调用其中的任何函数Js.Promise而无需Js.Promise作为模块的前缀。

但是有什么作用.{}呢?

4

1 回答 1

2

两者都将一些模块声明放在范围内,但在包装表达式.{}时创建了一条记录。.()

对于记录:

let point = json =>
  Json.Decode.{
    x: json |> field("x", float),
    y: json |> field("y", float)
  };

相当于:

let point = json =>
  {
    x: json |> Json.Decode.field("x", Json.Decode.float),
    y: json |> Json.Decode.field("y", Json.Decode.float)
  };

同样,对于表达式:

let _ =
  Js.Promise.(then_(value => resolve(Js.log(value)), okPromise));

相当于:

let _ =
  Js.Promise.then_(value => Js.Promise.resolve(Js.log(value)), okPromise));
于 2018-04-17T11:00:20.643 回答