我试图定义哪种类型的函数
(test, test) -> test
。
所以我写下了这样的代码:
let test_func: (test, test) -> test = fun ...
但是它给了我语法错误,所以我将其更改为
let test_func: (test, test) test = fun ...
而且它不给我语法错误消息。
但是我不知道为什么第一个给我语法错误。
(我也尝试过这种形式。let test_func (test, test): test
这是定义函数的更好方法吗?)
答案 0 :(得分:1)
(test, test)
不是有效的类型。如果要描述元组类型,则正确的语法是test * test
。我怀疑您实际上是想用两个参数来描述一个函数,但是它们将是test -> test -> test
,因为OCaml是一种咖喱语言。
(test, test) test
在语法上是有效的,因为它描述了具有两个参数的参数化类型。
let test_func (test, test): test
并不指定整个函数类型,而仅指定返回类型。 (test, test)
在这里描述了一个元组参数,其中项分别绑定到test
和test
。我猜您实际上是在使用不同的名称,否则它将无法编译。
您可以像下面这样分别指定每个参数的类型和返回类型:
let test_func (a: test) (b: test): test = ...