初始化变量OCaml

问题描述 投票:1回答:2

如何在OCaml中完成相当于int variable;的操作?也就是说,如何简单地声明变量?根据OCaml手册,似乎只能在一个步骤中声明和初始化变量。如果是这样,为什么这是理想的行为呢?

variables initialization ocaml declare
2个回答
2
投票

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(和大多数函数语言)中的变量只设置一次,但最初可能看起来很奇怪,但它实际上并没有改变您的语言表达能力,并且有助于使您的代码清晰安全。


1
投票

TL; DR

Simply put:你不需要声明你的函数和变量的类型,因为OCaml会为你解决它们! let x = 3;;

OCaml使用type inference,这意味着您的编译器会根据您分配的变量类型来推断您的变量类型。

类型推断是在编译时自动推断表达式类型的能力。编译器通常能够推断出函数的类型或函数的类型签名,而没有给出明确的类型注释。在许多情况下,如果类型推断系统足够健壮,或者程序或语言足够简单,则可以完全省略程序中的类型注释。

之所以使用它,是因为它需要通过变量创建来管理。您不需要明确地调出显而易见的东西,编译器会为您处理它。此外,您需要更好地了解代码如何使用您分配的变量。这个article有更多的细节

© www.soinside.com 2019 - 2024. All rights reserved.