【问题标题】:Initialize variable OCaml初始化变量 OCaml
【发布时间】:2018-09-01 22:55:06
【问题描述】:

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

【问题讨论】:

    标签: variables initialization ocaml declare


    【解决方案1】:

    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(和大多数函数式语言)中的变量设置一次且仅设置一次这一事实乍一看似乎很奇怪,但实际上它不会改变您的语言表达能力,并有助于使您的代码清晰和安全。

    【讨论】:

      【解决方案2】:

      TL;DR

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

      OCaml 使用type inference,这意味着您的编译器通过您分配给它的内容来推断您的变量类型。

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

      之所以使用它,是因为它将内务管理从变量创建中解脱出来。您无需明确指出显而易见的内容,编译器会为您处理好。此外,您需要更好地了解您的代码如何使用您分配的变量。这个article 有更多细节

      【讨论】:

        猜你喜欢
        • 2019-05-17
        • 2021-07-08
        • 2012-06-15
        • 2012-10-19
        • 2016-11-03
        • 2017-03-20
        • 2016-07-31
        • 2010-12-30
        • 2017-09-11
        相关资源
        最近更新 更多