Описание тега invariance

Ковариантность, контравариантность и инвариантность описывают, как существующая иерархия наследования типов изменяется при некотором преобразовании (например, использовании в дженериках). Если преобразование сохраняет порядок исходной иерархии, оно является "ковариантным". Если он переворачивает его, это "контравариантно". Если он его сломает, он "инвариантен".
1 ответ

C# универсальное наследование: инвариантность мешает вызову производного класса

Что я хочу сделать: abstract class TileBase { protected TileGroup<TileBase> tileGroup; } class Tile : TileBase { public Tile(Province Province) { tileGroup = Province; } } abstract class TileGroup<T> { protected T[] tiles; protected Tile…
20 авг '17 в 11:47
2 ответа

Ковариация путаницы. Невозможно назначить кортежи реализованных интерфейсов списку кортежей

Предисловие: я знаю, что есть много вопросов и ответов о ковариации и контравариантности, но я все еще чувствую себя не в своей тарелке и не знаю, какое решение реализовать. У меня есть два интерфейса, реализации которых предназначены для совместног…
1 ответ

Scala Set, что происходит с инвариантными типами?

Выполняя рефакторинг в приложении scala, я столкнулся с ситуацией, когда при переходе от List к Set возник вопрос, которого у меня раньше не было. У меня есть некоторое представление о дисперсии, но я хотел бы понять, что именно это означает для ком…
13 окт '16 в 10:14
1 ответ

Обобщения являются инвариантами, но компилируются без ошибок

Я получал ошибки несоответствия типов, пока я не реорганизовал код в это: public final Stream<Map.Entry<E, Integer>> orderedStreamOfEntries() { return this.m_map.entrySet() .stream() .sorted(Comparator.comparingInt(Entry::getValue)) .map…
27 июл '17 в 17:13
1 ответ

Массив<Number>: получить и установить значения Int без приведения

Я строю класс Matrix и хочу иметь возможность хранить NumberS в 2-м массиве. var data: Array&lt;Array&lt;Number&gt;&gt; = Array(width, {Array(height, {0})}) Это не работает, потому что Array&lt;Number&gt; а также Array&lt;Int&gt; инвариантны. Я могу…
13 май '18 в 12:22
2 ответа

Каковы веские причины для выбора инвариантности в API, таком как Stream.reduce()?

Обзор Java 8 Stream API дизайн, я был удивлен общей неизменности на Stream.reduce() аргументы: &lt;U&gt; U reduce(U identity, BiFunction&lt;U,? super T,U&gt; accumulator, BinaryOperator&lt;U&gt; combiner) Казалось бы, более универсальная версия того…
0 ответов

Значение слова "e" в Java

В IntelliJ IDEA, особенно когда я создаю экземпляр Collection класс как: Collection&lt;?&gt; collection = ...; collection. И попробуйте ввести метод addIntelliJ помогает мне сказать, что addпервый аргумент capture of ? e, Во всяком случае, я не могу…
07 окт '16 в 07:43
1 ответ

Обойти инвариантный тип результата в State

Я хотел бы определить State который строит конкретный подтип черты, в соответствии с decodeFoo: sealed trait Foo case class Bar(s: String) extends Foo case class Baz(i: Int) extends Foo val int: State[Seq[Byte], Int] = State[Seq[Byte], Int] { case b…
23 дек '18 в 01:43
1 ответ

Я прочитал все о Covariance, Contravariance и Invariance, но я все еще не понимаю, как разработать свой код

Я искал и читал / изучал столько, сколько казалось разумным до публикации этого. Я нашел похожие вопросы, но большинство постов на самом деле больше связаны с передачей "Списка производных типов" вызовам функций, которые требуют "Список базового тип…
0 ответов

Контравариантные или инвариантные интерфейсы в одном и том же списке в C#

Я застрял с проблемой ковариации и контравариантности интерфейса. У меня есть два общих интерфейса: public interface IConfigConsumer&lt;T&gt; where T : IConfiguration { void Load(T configuration); } public interface IConfigProvider&lt;out T&gt; wher…
01 мар '18 в 08:03
0 ответов

C# Недопустимая ошибка дисперсии при наличии параметра метода out

Я смотрел на похожие вопросы, хотя мой случай кажется другим. Для этого кода: public interface MyInterface&lt;out T&gt; { bool TrySomething(out T val); } Я получаю эту ошибку на C# 7.2: Недопустимая дисперсия: параметр типа "T" должен быть неизменны…
24 янв '18 в 15:11
0 ответов

Шаговый отклик для дискретного разностного уравнения

Как бы вы рассчитали ответ шага для следующего уравнения, если вы предполагаете начальный отдых: я понимаю, что необходимо z-преобразование, но я не знаю, как его реализовать или почему это необходимо y[n] - (1/4)*y[n-1] = u[n]
2 ответа

Дисперсия OCaml (+'a, -'a) и инвариантность

После написания этого куска кода module type TS = sig type +'a t end module T : TS = struct type 'a t = {info : 'a list} end Я понял, что мне нужно info быть изменчивым Я написал тогда: module type TS = sig type +'a t end module T : TS = struct type…
09 ноя '16 в 15:10
1 ответ

Универсальный подкласс mypy приводит к несовместимым типам

Я играю с реализацией моноидов с подсказками типа. Для этого я написал: M = TypeVar('M') class Monoid(Generic[M]): ... def append(self, m: 'Monoid[M]') -&gt; 'Monoid[M]': raise NotImplementedError() При использовании этого в подклассе, например A = …
28 окт '17 в 15:41
2 ответа

Почему можно привести общий класс?

Обобщения Java являются инвариантами, поэтому невозможно выполнить такое приведение: List&lt;Object&gt; li = (List&lt;Object&gt;)new ArrayList&lt;Integer&gt;(); Но в следующем коде в строке 4 я могу привести List&lt;Integer&gt; в List&lt;T&gt;, где …
19 май '16 в 18:58
1 ответ

Свойство родового класса Kotlin

Я знаю, что это может показаться повторяющимся вопросом, но я озадачен тем, как работают инвариантность, ковариация и контравариантность. Я не могу понять, почему я не могу скомпилировать этот фрагмент: class Test&lt;X: List&lt;Any&gt;&gt;{ lateinit…
1 ответ

SLS3.2.10, что плохого в неизменности здесь?

У новичка Scala возникла проблема: val cache: LoadingCache[Long, String] = CacheBuilder.newBuilder() .maximumSize(1000) .expireAfterWrite(10, TimeUnit.MINUTES) .build( new CacheLoader [Long, String] { override def load(key: Long): String = key.toStr…
22 ноя '16 в 01:37
0 ответов

Путь анализа инвариантности

Я провожу анализ пути, чтобы изучить его неизменность между двумя разными культурами. Когда я анализирую соответствие и параметры модели пути отдельно для каждой культуры, я обнаруживаю, что некоторые пути значимы в обеих культурах, тогда как некото…
07 авг '17 в 15:05
2 ответа

Почему все инвариантные позиции родового класса инвариантны в списках параметров типа в Scala?

Я немного озадачен строгостью проверки типов ниже - кажется, что инвариант T положение Inv[T] также инвариантен внутри VariantishСписок параметров: scala&gt; class Inv[T] defined class Inv scala&gt; class Variantish[+T, +TVar &lt;: Inv[T]] &lt;conso…
06 апр '17 в 15:48
2 ответа

Почему можно найти экземпляр Functor для Tree, но не для Branch или Leaf?

У меня есть следующее определение Functor: import cats.Functor import cats.syntax.functor._ object Theory { implicit val treeFunctor: Functor[Tree] = new Functor[Tree] { def map[A, B](fa: Tree[A])(f: A =&gt; B): Tree[B] = fa match { case Branch(left…
31 янв '18 в 14:52