这是在 Ocaml 中进行转换的示例,不清楚这条线在做什么吗?

Is this an example of casting in Ocaml, unclear on what this line is doing?

我正在查看用于创建 LLVM IR 的 codegen.ml 文件。我不熟悉 Ocaml 所以只需要一些说明

  let i32_t      = L.i32_type    context
  and float_t    = L.double_type context

  let ltype_of_typ = function
      A.Int   -> i32_t
    | A.Float -> float_t
  in

  let global_vars : L.llvalue StringMap.t =
    let global_var m (t, n) = 
      let init = match t with
          A.Float -> L.const_float (ltype_of_typ t) 0.0

所以对于这一行

 A.Float -> L.const_float (ltype_of_typ t) 0.0

“->”后面的东西是干什么的?是否将 0.0 转换为浮点数?

代码正在调用带有两个参数的函数 L.const_float。代码读起来就像是在设置一个从名称到值的全局映射。一些值似乎是固定浮点数的表示。除此之外我帮不了你,因为我不熟悉 LLVM。

但是 OCaml 中没有“类型转换”。标准库中有一些函数可以在数字类型之间进行转换(例如 int_of_float)。但是没有用于转换类型的语言功能。 OCaml 是一种强类型语言,类型转换(如在 C 或 C++ 中)几乎违反了这一点。

在专门针对 LLVM 的论坛上提问可能会更有帮助。