Articles of type inference

¿Inferencia de tipo genérico parcial posible en C #?

Estoy trabajando en la reescritura de mi interfaz fluida para mi biblioteca de clases de IoC, y cuando refactoreé un código para compartir algunas funcionalidades comunes a través de una clase base, encontré un inconveniente. Nota : Esto es algo que quiero hacer, no es algo que deba hacer. Si tengo que conformarme con una […]

Una característica peculiar de la inferencia de tipo de excepción en Java 8

Al escribir el código para otra respuesta en este sitio me encontré con esta peculiaridad: static void testSneaky() { final Exception e = new Exception(); sneakyThrow(e); //no problems here nonSneakyThrow(e); //ERRROR: Unhandled exception: java.lang.Exception } @SuppressWarnings(“unchecked”) static void sneakyThrow(Throwable t) throws T { throw (T) t; } static void nonSneakyThrow(T t) throws T { throw […]

Llamar a métodos generics estáticos

Me he topado con una situación curiosa que involucra métodos generics estáticos. Este es el código: class Foo { public static Foo createFoo() { // … } } class Bar { private Foo member; public Bar() { member = Foo.createFoo(); } } ¿Cómo es que no tengo que especificar ningún argumento de tipo en la […]

Inferencia de tipo genérico C # 3.0 – pasar un delegado como parámetro de función

Me pregunto por qué el comstackdor C # 3.0 no puede inferir el tipo de un método cuando se pasa como un parámetro a una función genérica cuando puede crear implícitamente un delegado para el mismo método. Aquí hay un ejemplo: class Test { static void foo(int x) { } static void bar(Action f) { […]

¿Por qué este método genérico con un límite puede devolver cualquier tipo?

¿Por qué comstack el siguiente código? El método IElement.getX(String) devuelve una instancia del tipo IElement o de subclases de los mismos. El código en la clase Main invoca el getX(String) . El comstackdor permite almacenar el valor de retorno en una variable del tipo Integer (que obviamente no está en la jerarquía de IElement ). […]

¿Por qué 3 yx (que se le asignó 3) tienen diferentes tipos inferidos en Haskell?

La inferencia de tipos en Haskell tiene un poco de curva de aprendizaje (¡por decir lo menos!). Una buena manera de comenzar a aprender es con ejemplos simples. Entonces, el siguiente es un poco de un “mundo de hola” para la inferencia de tipo. Considere el siguiente ejemplo: Prelude> :t 3 3 :: (Num t) […]

Funciones con tipos de parámetros generics

Estoy intentando descubrir cómo definir una función que funcione en múltiples tipos de parámetros (por ejemplo, int e int64). Según tengo entendido, la sobrecarga de funciones no es posible en F # (sin duda el comstackdor se queja). Tomemos por ejemplo la siguiente función. let sqrt_int = function | n:int -> int (sqrt (float n)) […]

decltype y paréntesis

No entiendo la última línea del ejemplo en la página 148 del FCD (§7.6.1.2 / 4): const int&& foo(); int i; struct A { double x; }; const A* a = new A(); decltype(foo()) x1 = i; // type is const int&& decltype(i) x2; // type is int decltype(a->x) x3; // type is double decltype((a->x)) […]

Los métodos generics en .NET no pueden inferir sus tipos de devolución. ¿Por qué?

Dado: static TDest Gimme(TSource source) { return default(TDest); } ¿Por qué no puedo hacer esto? string dest = Gimme(5); sin obtener el error del comstackdor: error CS0411: The type arguments for method ‘Whatever.Gimme(TSource)’ cannot be inferred from the usage. Try specifying the type arguments explicitly. El 5 se puede inferir como int , pero hay […]

La inferencia de tipo genérico no funciona con el encadenamiento de métodos?

Este código se comstack en Java 8 pero no se puede comstackr en Java 7: class Map { static Map empty() {return null;} Map put(K k, V v) {return null;} V get(K k) {return null;} } class A { static void f(Map m){} public static void main(String[] args) { f(Map.empty()); } } No infiere el […]