这里是OCaml的新手。
基本上试图用两个函数来编译一段代码,但是我无法在第9行的第26-27列字符的类型错误中编译它,说:
“错误:此表达式的类型为t,但是期望该类型的表达式 字符串“”
基本上,第8行调用的parse函数期望使用类型字符串,但我不知道为什么。
sexp参数的类型:
buttonPressed = () => {
let {clicks} = this.state // define `clicks` here
if(clicks > 5)
{
Alert.alert('Caution!','You have clicked 5 times already!');
this.setState({clicks: 0});
this.forceUpdate();
}
this.setState({clicks: clicks+1});
// ^^^^^^^
}
代码:
type sexp = Atom of string | List of sexp list
答案 0 :(得分:1)
您给出的代码将不会编译,因为第9行引用了parse
,但直到稍后才定义。
要定义两个相互递归的函数,您需要使用let rec ... and ...
:
let rec f x = (* definition of f, which calls g *)
and g x = (* definition of g, which calls f *)
由于在第9行上看不到parse
的更高定义,因此该名称必须引用某个先前的定义。也许在parse
模块中定义了一个名为Sexp
的函数。 (这是谨慎使用open
的原因之一。)