ocaml - 使用局部变量声明全局变量
问题描述
假设我想使用局部变量声明一个全局变量:我可以做 (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 是如何尝试分析这个表达式的?
解决方案
let
两种类型的s之间的最大区别在于thatlet ... in ...
是一个表达式,但let
没有in
is 不是。现在 in 之后的部分in
必须let ... in ...
是一个表达式,所以in
lesslet
在那里是不允许的——它只允许在模块的顶层。
推荐阅读
- jquery - ajax刷新表后如何保留输入标签值
- c# - 如何在 C# 控制台应用程序中将 DataTable 数据或选择查询数据插入到不同的 Oracle 数据库表中
- html - 在 css 中使用 cols 的测量单位
- python - 在我的列表中查找最高版本
- javascript - JSNI 脚本失败,但在 Chrome Devtools 控制台中运行时脚本成功
- css - 它不会从左到右显示图像。它仅垂直显示
- python - 在 Sublime Text 3 中安装 Anaconda 后没有 Scikit-learn
- javascript - Angular - 多个模块
- scala - 替换列表元素中的字符串
- json - Swift - 在 HTTP POST 中未正确发送编码密钥