首页 > 解决方案 > 使用局部变量声明全局变量

问题描述

假设我想使用局部变量声明一个全局变量:我可以做 (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 是如何尝试分析这个表达式的?

标签: ocaml

解决方案


let两种类型的s之间的最大区别在于thatlet ... in ...是一个表达式,但let没有inis 不是。现在 in 之后的部分in必须let ... in ...是一个表达式,所以inlesslet在那里是不允许的——它只允许在模块的顶层。


推荐阅读