【发布时间】:2018-09-01 22:55:06
【问题描述】:
如何在 OCaml 中执行相当于 int variable; 的操作?也就是说,如何简单地声明一个变量?根据 OCaml 手册,似乎只能一步声明和初始化一个变量。如果是这样,为什么会出现这种行为?
【问题讨论】:
标签: variables initialization ocaml declare
如何在 OCaml 中执行相当于 int variable; 的操作?也就是说,如何简单地声明一个变量?根据 OCaml 手册,似乎只能一步声明和初始化一个变量。如果是这样,为什么会出现这种行为?
【问题讨论】:
标签: variables initialization ocaml declare
OCaml 中的变量是声明且不可变的。
主要原因是未初始化的变量是错误的来源:
int x; // not initialized
read_and_use(x); // error
通过确保您的变量始终被初始化,您可以确保代码中的任何地方都不会出现未经授权的值。
另一点是不变性(声明性语句附带):
let x = 4;; (* Declare x *)
let f y = x + y;; (* Use x *)
let x = 5;; (* Declare a new variable with the same name as x *)
assert (f 10 = 14);; (* The x = 4 definition is used, as x is immutable *)
由于变量是常量,因此声明它们已初始化会不断创建无效变量。这没什么用。
OCaml(和大多数函数式语言)中的变量设置一次且仅设置一次这一事实乍一看似乎很奇怪,但实际上它不会改变您的语言表达能力,并有助于使您的代码清晰和安全。
【讨论】:
TL;DR
Simply put: 你不需要声明你的函数和变量的类型,因为 OCaml 会为你找出它们!
let x = 3;;
OCaml 使用type inference,这意味着您的编译器通过您分配给它的内容来推断您的变量类型。
类型推断是在编译时自动推断(部分或全部)表达式类型的能力。编译器通常能够推断变量的类型或函数的类型签名,而无需给出明确的类型注释。在许多情况下,如果类型推断系统足够健壮,或者程序或语言足够简单,则可以完全省略程序中的类型注释。
之所以使用它,是因为它将内务管理从变量创建中解脱出来。您无需明确指出显而易见的内容,编译器会为您处理好。此外,您需要更好地了解您的代码如何使用您分配的变量。这个article 有更多细节
【讨论】: