let name = expression in定义一个命名的局部表达式 直到;;结束本代码块
局部表达式和变量不同 更类似于常量表达式 局部绑定 只能被隐藏 不能被改写
1 | let f a b = |
可以在top level中定义全局名
引用 真正的可赋值/修改的变量
1 | let my_ref = ref 0;; |
类似于指针`
Nested Funcions嵌套函数
lexical scoping词法变量域
嵌套函数的格式和局部命名表达式相同。let name arguments = function-definition in.
OCaml通常将文件名的第一个字母大写作为模块名
一是在程序开头声明open Graphics;;。二是在所有函数调用前加上前缀,比如Graphics.open_graph。
open类似于pythonfrom xx import *
所有Pervasives中的符号会被自动引入所有的OCaml程序中。
重命名模块 module Gr = Graphics;;
;被称为sequence point序列点 也是一个运算符 unit -> 'b -> 'b接受两个值并返回第二个 但并不完全一样 ==为什么==
全局语句必须用;;分割 函数定义中不要用;;
?foo 和 ~foo 在OCaml中分别表示函数的可选和命名参数。
foo#bar 是调用对象foo的bar方法