【问题标题】:What's the meaning of '()' in OCaml?OCaml 中的 '()' 是什么意思?
【发布时间】:2023-04-10 12:44:01
【问题描述】:

the book Real World OCaml,我找到了这段代码:

let command = 
  Command.basic
    ~summary:"Generate an MD5 hash of the input data" 
    Command.Spec.(
      empty
      ...
      +> anon (maybe_with_default "-" ("filename" %: file))
    )
    (fun use_string trial filename () ->

我在最后一行看到() (fun use_string trial filename ())。

同样来自Print a List in OCaml,我在第一场比赛中也看到了()

let rec print_list = function 
[] -> ()
| e::l -> print_int e ; print_string " " ; print_list l

那么,() 在这两种情况下是什么意思呢? lambda 表达式 (fun) 如何在其参数列表中包含 ()

【问题讨论】:

标签: function ocaml


【解决方案1】:

它是一个空构造函数,是type unit 的唯一构造函数。惯例是使用这个构造函数来表示“没有特定值”,这在使用有效代码时很常见。

返回 () 是不返回任何内容的 ML 方式。

当它出现在参数列表中时,它是匹配的,就像任何其他构造函数一样。这是一种表示参数没有价值的方法。在 ML 中这样做是必要的,因为所有函数都是一元的。你不能有一个零参数的函数,所以你传递一个不包含任何信息的参数,即()

【讨论】:

  • 不仅所有 ML 函数都只接受一个参数,而且它们也只返回一个结果。所以() 也是一个函数在它没有任何想要返回的值时返回的内容。两者都是典型的有效代码:如果f 是纯的并且不带参数,则没有理由不将其设为常量,如果它没有返回结果,则意味着它的效果很有趣。
  • 单位类型在多态数据结构中也很有用,例如仅用作一组键的哈希表 ((string, unit) Hashtbl.t)。
猜你喜欢
  • 2011-11-23
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 2010-12-27
  • 2016-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多