我很困惑关键字in
在OCAML中的作用。我什么时候需要使用它?
我接近理解的唯一例子是:
let quit_loop = ref false in
while not !quit_loop do
print_string "Have you had enough yet? (y/n) ";
let str = read_line () in
if str.[0] = 'y' then
quit_loop := true
done;;
或
let x = 10 in
let y = 20 in
x + y ;;
这里有什么指示?
答案 0 :(得分:6)
查看它的最佳方式是in
不是单独的关键字。相反,有一个看起来像let v = expr1 in expr2
的表达式。这是OCaml定义" local"的方式。变量。它的含义是您将v
用作expr2
中的命名值,而expr2
中显示的值是{的值{ {1}}。
我怀疑这一点令人困惑的唯一原因是OCaml中有一个不同的结构用于定义" global"变量。在模块的顶层,您可以说expr1
。这定义了(通常)从模块导出的全局名称。
你提供的所有例子都属于第一类;也就是说,他们定义了名为let v = expr
,quit_loop
,str
和x
的局部变量。
作为语法问题,y
主要表现为标点符号;它允许语言的解析器告诉in
停止和expr1
开始的位置。这在ML语言中尤其必要,其中将两个表达式彼此相邻放置具有特定(并且非常常用)的含义。