编译以下代码时出现错误
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
答案 0 :(得分:3)
两种变体都是完全有效的原因代码。你可以拥有多个参数的构造函数,并且你做得对。显然,问题在于Js.log
函数,这是一种神奇的函数,并且对于n-ary构造函数,魔法失败了。
所以,我的建议是(i)在bucklescript错误跟踪器中提交一个问题,并且(ii)不使用魔术Js.log
函数,而是派生或编写自己的打印机功能并使用它。