我正在学习OCaml,目前我是一个完整的初学者。我试图习惯语法,只花了15分钟时间调试一个愚蠢的语法错误。
let foo a b = "bar";;
let biz = foo 2. -1.;;
我遇到错误This expression has type 'a -> string but an expression was expected of type int
。我解决了该错误,但它提示我要学习什么是处理这种语法特殊性的最佳方法。
基本上,OCaml将我打算作为数字常量-1.
的内容视为两个单独的标记:-
和1.
,最终我只向foo
传递了一个参数。在其他语言中,我不熟悉这种情况,因为参数用逗号分隔(或者在Scheme中有括号)。
在OCaml中处理此语法特殊性的常用方法是什么?是用括号(foo 2. (-1.)
)包围数字还是有其他方法?
答案 0 :(得分:4)
可以使用一元负运算符~-.
来避免此问题:foo ~-.1.
(及其整数~-
),但是在有问题的地方加上括号通常更简单表达。