【发布时间】:2015-12-06 14:05:02
【问题描述】:
我正在看一个我在培训课程中看到的函数,无法理解以下函数末尾的“()”的用法:
let acclock (start:DateTimeOffset) rate () =
let now = DateTime.Now
let elapsed = now - start
start.AddTicks (elapsed.Ticks * rate)
为什么函数签名会在其签名的其他参数末尾有一个单位参数?
因此,我认为单位参数意味着没有类似于“void”的参数或返回类型。
【问题讨论】:
-
仅供参考;在像 F# 这样的 FPL 中,像
unit -> int这样的函数意味着它是一个采用单位值的函数。不像它通常用类 C 语言解释;一个没有值的函数。对我来说,这是 FP 相对于类 C 语言的众多小好处之一。在 C# 中,您经常需要对void的情况进行特殊处理(例如Task和Task<>)。在 F# 中,函数总是接受并返回一个值,对于unit值不需要特殊处理。之所以称为单元,是因为它映射到unit类别,这是一个只有一个值的类别。