¿Hay alguna diferencia de significado entre t<'a>
y 'a t
en F #? ¿Pueden usarse indistintamente incluso después de la declaración?Cualquier diferencia entre t <'a> y 'a t en F #?
Respuesta
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>
”. Pararefs
, 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 #).
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?).
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.
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
- 1. Diferencia entre <T extends A> void foo (T t) y void foo (A a)
- 2. Diferencias entre .CreateObjectSet <T>,. Set <T> y .CreateQuery <T>?
- 3. ¿Cuál es la diferencia entre ReadOnlyCollection <T> y ReadOnlyCollectionBuilder <T> en .Net?
- 4. ¿Cuál es la diferencia entre "plantilla <class T>" y "plantilla <typename T>"?
- 5. Rhino Mocks - Diferencia entre GenerateStub <T> y GenerateMock <T>
- 6. Diferencia entre Obtener <T> y Cargar <T>
- 7. Diferencia entre la lista <T> y LinkedList <T>
- 8. Diferencia entre `T &` y `const T &` para todos const clase
- 9. ¿Cuál es la diferencia entre IEqualityComparer <T> e IEquatable <T>?
- 10. <out T> vs <T> en Genericos
- 11. F #: Nullable <T> Soporte
- 12. IEnumerable <T> y IQueryable <T> aclaración?
- 13. IList <T> a IQueryable <T>
- 14. Diferencia entre IEnumerable e IEnumerable <T>?
- 15. ¿Hay alguna diferencia entre los métodos del iterador que devuelven IEnumerable <T> y IEnumerator <T>?
- 16. IList <T> a ObservableCollection <T>
- 17. C#: Diferencia entre la lista <T> y Colección <T> (CA1002, no exponga las listas genéricas)
- 18. Mapeo entre T -> iHandler <T>
- 19. ¿Cuál es el uso de <T> en <T> T addAndReturn pública estática (elemento T, colección Colección <T>) {
- 20. ICollection vs ICollection <T> - La ambigüedad entre ICollection <T> .Count y ICollection.Count
- 21. ¿Hay alguna diferencia entre "T" y "const T" en el parámetro de la plantilla?
- 22. impulso :: make_shared <T> (...) no se compila, shared_ptr <T> (nuevo T (...)) hace
- 23. return Queryable <T> o List <T> en un Repository <T>
- 24. Extendiendo T y SomeInterface <T> en Java
- 25. ¿Cuál es la diferencia entre Func <T, TResult> y Converter <TInput, TOutput>?
- 26. ¿Cómo puedo crear una Acción <T> en F #?
- 27. Diferencia entre la lista <T> y la lista <object>?
- 28. ¿Cuál es la diferencia entre ";" y "IR" en T-SQL?
- 29. La conversión de "foo <T>" a "foo const <const T>" - C++
- 30. Genéricos: T extiende MyClass vs. T extiende MyClass <T>
Sí, haces '(string, float) Hashtbl.t' en OCaml. –