具有多个参数的Reasonml类型,错误异常失败(“nth”)

时间:2017-07-24 09:24:54

标签: reason bucklescript

编译以下代码时出现错误

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”)
ninja:build stopped:子命令   失败。

当我将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

1 个答案:

答案 0 :(得分:3)

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

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