Tengo el siguiente código que verificará si un List<int> es compatible con el tipo IEnumerable<object>. La covarianza no se aplica a los tipos de valor, por lo que esta expresión debería evaluar como false. public class PruebasVentanaObservacion { [Hecho] public void AlEjecutar_DevuelveFalseEnCodigo_YTrueEnVentanaObservacion() { object listaDeEnteros = new List<int>(); var x . . . Read more
Actualmente estoy aprendiendo sobre OCaml, y especialmente sobre funtores. He revisado el archivo map.mli de la biblioteca estándar, y alrededor de la línea 70, hay lo siguiente: type key (** El tipo de las claves del mapa. *) type !+’a t (** El tipo de los mapas desde el tipo . . . Read more
U = TypeVar(“U”, covariant=True) class IterableAndSized(Protocol[U], Sized, Iterable[U]): … Quiero crear un protocolo como el anterior que utilice las clases base abstractas Sized e Iterable para definir un tipo aceptable; por ejemplo, T = TypeVar(“T”) def tailvalue(index_from_rear: int, x: Iterable[T] | IterableAndSized[T]) -> T: if isinstance(x, Sized): for i, val . . . Read more
Para el código fuente de Java 8 en la clase Stream: public static<T> Stream<T> generate(Supplier<T> s) { … } En la clase Optional: public T orElseGet(Supplier<? extends T> other) { … } Ya leí este post: PECS, pero tengo algunas confusiones. ¿Por qué el parámetro del método generate (Supplier<T> s) . . . Read more
Estoy tratando de entender la contravarianza en los delegados genéricos. En el siguiente código, puedo asignar el delegado sgd1 a sgd2 (covarianza). A pesar de que el parámetro de tipo de sgd4 es de tipo base del parámetro de tipo de sgd3, ¿por qué no puedo asignar sgd3 a sgd4 . . . Read more