以下代码给出错误:
let alpha = Hashtbl.create 26 in
let print_and_add a =
print_char a;
Hashtbl.add alpha a true;;
let str = read_line () in
String.iter (fun x -> if Hashtbl.mem alpha x=false then print_and_add x) str
它应该做什么:每次调用函数(使用char参数)时,它应该打印char,并将其添加到Hash表(alpha)。 我尝试使用函数的其他语法:
let alpha = Hashtbl.create 26 in
let print_and_add = (fun a ->
print_char a;
Hashtbl.add alpha a true) in
let str = read_line () in
String.iter (fun x -> if Hashtbl.mem alpha x=false then print_and_add x) str
但我仍然想知道为什么第一个代码失败了。 - 谢谢你的帮助。
答案 0 :(得分:2)
;;
符号专门标记表达式在全局级别的结束。因此,它之后的一切都必须成为不同表达的一部分。因此,alpha
之后无法定义。
我从不在源代码中使用;;
,只有在输入到顶层时才使用let print_and_add ...
。在我看来,这就是它的用途。
您的代码也有in
,没有相应的;;
。这仅在全局级别(不在表达式内)有效。
如果您在原始代码中将in
更改为onNext
,则可以获得有效的内容。至少它对我有用。
答案 1 :(得分:1)
alpha
时,
[]+[]
已不在范围内。