为什么有些OCaml函数将()作为参数?

qre*_*est 16 ocaml

Unix模块中的示例:

val environment : unit -> string array
Run Code Online (Sandbox Code Playgroud)

为什么不呢:

val environment : string array
Run Code Online (Sandbox Code Playgroud)

Gia*_*ian 19

因为它表示一个函数,它将类型unit的值作为其参数.单位类型仅包含值"()".这通常用于表示函数将执行某种IO或引起副作用,并且不需要输入.您提供的第二种类型签名是值的签名,而不是可以应用的函数.如果某个表达式绑定到此名称,那么将在值绑定发生时计算该表达式,而不是在引用它时(如函数应用程序的情况).

  • 正是!单位只是提供一个方便的值作为参数.出于这个原因,它经常在这种情况下使用,因为它是一个值,但并不真正代表任何有意义的东西.当我说"引用"时,我有点使用狡猾的话.我应该说"应用"(函数是值,因此可以在不应用的情况下引用绑定到它们的函数的名称). (6认同)
  • 所以不同之处在于,通过使用一个函数取*some*参数,可以在引用时强制执行评估,从而使IO在预期时生效? (4认同)