假设我要使用局部变量声明一个全局变量: 我可以做(1)
let y = let x = 1 in x + 1;;
但是现在如果我愿意(2)
let x = 1 in let y = x + 1;;
似乎ocaml无法理解这种语法,它以;;结尾,但是我不明白为什么,因为(3)
let x = 1 in 1;;
有效,即使没用。
在(2)会发生什么? ocaml如何尝试分析此表达?
答案 0 :(得分:3)
两种let
之间的最大区别是let ... in ...
是一个表达式,而没有let
的{{1}}不是表达式。现在in
中in
之后的部分必须是一个表达式,因此此处不允许少let ... in ...
的{{1}}-仅在模块的顶层允许。