初始化变量OCaml

时间:2018-09-01 22:55:07

标签: variables initialization ocaml declare

在OCaml中,如何等效于int variable;?也就是说,如何简单地声明一个变量?根据OCaml手册,似乎只能一步一步声明和初始化变量。如果是这样,为什么会有这种期望的行为?

2 个答案:

答案 0 :(得分:2)

OCaml中的变量是声明的并且是不可变的。

主要原因是未初始化的变量是错误的来源:

public function up()
    {
        Schema::create('fakultas', function (Blueprint $table) {
            $table->increments('id');
            $table->string('nama_fakultas');
            $table->string('nama_universitas')->unsigned();
            $table->foreign('nama_universitas')->references('id')->on('universitas');
            $table->string('keterangan');
            $table->timestamps();
        });
    }

通过确保始终对变量进行初始化,可以确保代码中的任何地方都不会发生未经授权的值。

另一点是不变性(声明性语句随附):

int x; // not initialized
read_and_use(x); // error

由于变量是常量,因此声明它们已初始化将创建不断无效的变量。那就没用了。

在OCaml(和大多数功能语言)中设置一次且仅一次设置变量的事实乍看起来似乎很奇怪,但这实际上并不会改变语言的表达能力,并有助于使代码清晰安全。

答案 1 :(得分:1)

TL; DR

  

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

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

  

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

之所以使用它,是因为它使管理工作不再需要创建变量。您无需显式地调用明显的内容,编译器会为您处理。此外,您需要更好地了解代码如何使用分配的变量。这个article有更多细节