Вопросы по определению ленивых - PullRequest
5 голосов
/ 18 января 2010

В строке 5633 в prim-types.fs (v1.9.7.8) есть следующее сокращение типа:

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

У меня есть несколько вопросов по этому поводу.

  1. Что означают двойные кавычки?
  2. Это определение эквивалентно type lazy<'T> = Lazy<'T>? (Если нет, то чем он отличается?)

Ответы [ 2 ]

8 голосов
/ 18 января 2010

Двойные обратные тики позволяют использовать ключевое слово F # в качестве идентификатора. Другой пример будет

let ``let`` = 42
5 голосов
/ 19 января 2010

Чтобы ответить на вторую половину вашего вопроса, универсальные типы в F # могут быть указаны с использованием синтаксиса в стиле O'Caml, где универсальный параметр предшествует типу (например, 'a list, int array и т. Д.), Или стиль .NET с угловыми скобками (например, list<'a>, array<int> и т. д.), поэтому два определения действительно в основном эквивалентны (за исключением того, что написанная вами версия синтаксически неверна, поскольку lazy является ключевым словом). Для многопараметрических универсальных типов стиль O'Caml устарел и генерирует предупреждение (например, let (m:(int,string) Map) = Map.empty следует переписать как let (m:Map<int,string>) = Map.empty).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...