reason-ml这是一个类型推断问题?

时间:2018-01-09 17:16:13

标签: types compiler-errors reason

我正在尝试推理并遇到一个我不理解的错误

这是我的代码:

template <typename... T>
void Bar(const std::tuple<T...> t, VType<T...>* v) {
  v.push_back(t); 
}

当我使用BuckleScript编译它时,我收到以下错误:

let mult = (x:float, y:float):float => x * y;

我不明白为什么编译器需要将 We've found a bug for you! D:\1\bbl\orga\src\demo.re 1:40 1 Ôöé let mult = (a:float, b:float):float => a * b; This has type: float But somewhere wanted: int You can convert a float to a int with int_of_float.If this is a literal, you want a number without a trailing dot (e.g. 20). 变成float这里

2 个答案:

答案 0 :(得分:5)

我的建议是删除类型并让推理处理它,它确实很好。

但是如果你想保留你的特定类型,那么你需要改变你的运营商。你所拥有的是两个整数相乘。如果要将两个浮点数相乘,则将其更改为:

let mult = (x:float, y:float):float => x *. y;

请注意,运算符从*转到*.以指示浮点数学。

请在此处查看更多文档:https://caml.inria.fr/pub/docs/manual-ocaml/libref/Pervasives.html#1_Floatingpointarithmetic

答案 1 :(得分:1)

我不知道原因,但不是像ocaml那样保留整数的*运算符?试试*。而不是运营商