关于懒惰的定义的问题

时间:2010-01-18 19:33:08

标签: f#

在prim-types.fs(v1.9.7.8)的第5633行,有以下类型缩写:

type 'T ``lazy`` = Lazy<'T>

我有几个问题。

  1. 双重反引号是什么意思?
  2. 此定义是否等同于type lazy<'T> = Lazy<'T>? (如果没有,它有什么不同?)

2 个答案:

答案 0 :(得分:8)

双后退标记是一种允许将F#关键字用作标识符的方法。另一个例子是

let ``let`` = 42

答案 1 :(得分:5)

要回答问题的后半部分,可以使用O'Caml样式语法指定F#中的泛型类型,其中泛型参数位于类型之前(例如'a listint array等。),或带有尖括号的.NET风格(例如list<'a>array<int>等),因此这两个定义确实基本相同(除了您编写的版本在语法上无效,因为{ {1}}是关键字)。对于多参数泛型类型,不推荐使用O'Caml样式并生成警告(例如,lazy应重写为let (m:(int,string) Map) = Map.empty)。