4

编译以下代码时出现错误

type shape =
  | Circle int
  | Square int
  | Rectangle int int;

let myShape = Circle 10;

let area =
  switch myShape {
  | Circle r => float_of_int (r * r) *. 3.14
  | Square w => float_of_int (w * w)
  | Rectangle w h => float_of_int (w * h)
  };

Js.log area;

致命错误:异常失败(“nth”)
忍者:构建停止:子命令失败。

当我将其更改Rectangle为元组(int,int)时,它可以工作

type shape =
  | Circle int
  | Square int
  | Rectangle (int, int);

let myShape = Circle 10;

let area =
  switch myShape {
  | Circle r => float_of_int (r * r) *. 3.14
  | Square w => float_of_int (w * w)
  | Rectangle (w, h) => float_of_int (w * h)
  };

Js.log area;

数据构造函数不能有多个参数吗?

谢谢

问题已提交至buckelscript https://github.com/BuckleScript/bucklescript/issues/1822

4

1 回答 1

4

这两种变体都是完全有效的原因代码。你可以有多个参数的构造函数,而且你做得对。显然,问题出在Js.log函数中,这是一个神奇的函数,并且使用 n 元构造函数,魔法失败了。

所以,我的建议是(i)在 bucklescript 错误跟踪器中提交问题,(ii)不要使用魔法Js.log函数,而是派生或编写自己的打印机函数并使用它。

于 2017-07-24T12:33:48.650 回答