2010-01-18 3 views
5

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

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

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

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

ответ

8

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

let ``let`` = 42 
+0

На самом деле это позволяет использовать любую строку в качестве идентификатора, так что вы любите идентификаторы с вопросительными знаками (аля Ruby) вы можете сказать: \t пусть '' хорошо '' = ложь Хотя Я не уверен, что это действительно хороший способ написать код. – Robert

5

Для ответа на вторую половину вашего вопроса, родовые типы в 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).

+1

... или еще: 'let m = Map.empty ', что немного лучше, на мой взгляд. –

Смежные вопросы