2012-04-16 14 views

Respuesta

14

No hay diferencia, y sí, se pueden utilizar indistintamente, incluso después de la declaración.

Pero hacer la nota del F# Component Design Guidelines recomendación (Sección 4.2):

considerar el uso de la sintaxis de prefijo para los genéricos (Foo<T>) con preferencia a la sintaxis de sufijo (T Foo), con cuatro excepciones notables (list, option , array, ref).

F # hereda tanto el estilo ML posfijo de nombrar tipos genéricos, por ejemplo "int list", así como el estilo de prefijo .NET, p. Ej. "list<int>". Debería preferir el estilo .NET, excepto cuatro tipos específicos de . Para las listas F #, use el formulario postfijo: "int list" en lugar de "list<int>". Para las opciones, use el formulario de postfijo: "int option" en lugar de "option<int>". Para matrices, utilice el nombre sintáctica “int[]” en lugar de cualquiera de los dos “int array” o “array<int>”. Para refs, uso “int ref” en lugar de “ref<int>” o “Ref<int>”. Para todos los demás tipos , utilice el formulario prefijo: “HashSet<int>”, “Dictionary<string,int>”, ya que este se ajusta a los estándares .NET

Además, obtendrá una advertencia del compilador si se utiliza el estilo ML genérica notación de lista de parámetros, por ejemplo ('a,'b) t contra t<'a,'b>.

Y ya que estamos en ello, tenga en cuenta la siguiente recomendación en Section 3.1 de la misma guía:

utilice ningún PascalCase de nombres de parámetros genéricos en API públicas, incluyendo para bibliotecas F # -frente. En particular, use nombres como T, U, T1, T2 para parámetros genéricos arbitrarios, y cuando los nombres específicos tengan sentido , entonces para las bibliotecas F # use nombres como Clave, Valor, Arg (pero no, por ejemplo, TKey).

(aunque personalmente tiendo a ignorar esta recomendación para las bibliotecas públicas de F #).

3

ninguna diferencia en absoluto, no es seguro que esto es digno de una respuesta entera! Prefiero el primero especialmente cuando se trata de parámetros de tipos múltiples (¿es posible con el último?).

+1

Sí, haces '(string, float) Hashtbl.t' en OCaml. –

1

Yo diría que la diferencia es la legibilidad. Para un parámetro, la sintaxis ' no es demasiado confusa, pero cuando obtienes una lista de ellos, es mucho más fácil leer la versión del paréntesis angular.

2

creo que la sintaxis 'a t es más idiomática (que se utiliza en casi todos los ejemplos de MSDN y emitida por el compilador generará que la sintaxis de los archivos de firmas)

Hay un ejemplo similar para las matrices

int[] , int array 

La sintaxis 'a t es también más agradable para los parámetros concretos -

int list, List<int> 

tan poco de coherencia argumenta a favor 'a t

Cuestiones relacionadas