2010-01-18 10 views
5

En la línea 5633 de Prim-types.fs (v1.9.7.8) no es del tipo siguiente abreviatura:Preguntas sobre la definición de vago

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

Tengo un par de preguntas sobre el mismo.

  1. ¿Qué significan los doble backticks?
  2. ¿Es esta definición equivalente a type lazy<'T> = Lazy<'T>? (De lo contrario, ¿cómo es diferente?)

Respuesta

8

Las marcas de retroceso doble son una forma de permitir que se use una palabra clave F # como identificador. Otro ejemplo sería

let ``let`` = 42 
+0

De hecho, se le permite utilizar cualquier cadena como un identificador, por lo que es aficionado a los identificadores con signos de interrogación (ALA Rubí) se puede decir:? \t Let '' '' es bueno = false Aunque No estoy convencido de que esta sea realmente una buena forma de escribir código. – Robert

5

Para responder a la segunda parte de su pregunta, tipos genéricos en F # pueden especificarse utilizando la sintaxis de estilo O'Caml donde el parámetro genérico precede el tipo (por ejemplo 'a list, int array, etc. .), o el estilo .NET con corchetes (por ejemplo, list<'a>, array<int>, etc.), por lo que las dos definiciones son básicamente equivalentes (excepto que su versión como está escrita no es sintácticamente válida porque lazy es una palabra clave). Para los tipos genéricos multiparámetros, el estilo O'Caml está en desuso y generará una advertencia (por ejemplo, let (m:(int,string) Map) = Map.empty se debe volver a escribir como let (m:Map<int,string>) = Map.empty).

+1

... o bien: 'let m = Map.empty ' que es un poco más agradable en mi opinión. –