问题标签 [invariance]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
305 浏览

c# - 我已经阅读了所有关于协变、逆变和不变性的内容,但我仍然不知道如何设计我的代码

在发布此之前,我已经尽可能多地搜索和阅读/研究了似乎合理的内容。我发现了类似的问题,但大多数帖子实际上更多地涉及将“派生类型列表”传递给需要“基本类型列表”的函数调用。我可以欣赏动物的例子,并且觉得我在学习后有了更好的把握。

话虽如此,我仍然无法弄清楚如何在我的特定用例中解决问题。我需要在集合中聚合“TestInterface(s) 的通用类”的实例。我已经在我最大的努力下复制/粘贴了似乎是完成任务的最佳方式。

上面的代码失败并出现以下编译错误:

错误 CS1503:参数 1:无法从“Covariance.GenericClass”转换为“Covariance.GenericClass”

错误 CS1503:参数 1:无法从“Covariance.GenericClass”转换为“Covariance.GenericClass”

任何帮助/指导或相关链接将不胜感激。如果这是一个重复的问题,我再次道歉。谢谢你!

0 投票
2 回答
342 浏览

c# - 协方差混淆。无法将已实现接口的元组分配给元组列表

前言:我知道有很多关于协变和逆变的问题和答案,但我仍然感到困惑,不知道要实施什么解决方案。

我有两个接口,它们的实现打算成对一起使用。一个提供有关销售项目的信息,另一个提供销售项目的语言相关信息。

我无法控制这些接口

GoodsItem对于有形的和无形的,我也有这两个接口的两个实现ServiceItem。同样,我无法控制这些接口

正如我所说,这些是我无法控制的课程。我想创建这些配对 ( List<Tuple<IItem, IItemTranslation>>) 的通用列表,但我不能:

问题:在不更改我的IItemITranslation类或其派生类型的情况下,能够传递这些配对的通用列表而不在接口和它们的类型之间来回转换它们的最干净的方法是什么?

警告。我试图简化问题,但我实际上并没有使用元组。实际上,我正在使用这样的类:

并且我的服务正在返回强类型列表,List<ItemAndTranslationPair<GoodsItem, GoodsTranslation>>因此当我将项目添加到“通用​​”列表时,它看起来像:

0 投票
2 回答
338 浏览

scala - 为什么所有不变的泛型类位置在 Scala 的类型参数列表中都是不变的?

我对下面的类型检查器的严格性感到有些困惑——似乎 的不变T位置在的参数列表Inv[T]中也是不变的:Variantish

变体类型通常可以合法地出现在看起来像不变参数列表的位置,例如具有对象保护的可见性:

并且似乎以下内容与类型安全一样:

上面提到的检查需要这么严格吗?

0 投票
0 回答
4386 浏览

r - R - lavaan - sem - 负方差误差

我已经建立了一个这样的模型:

从总结中我得到:

“有趣”的事情是我在尝试检查时得到一个负方差错误:

我已经坚持了一段时间了。我已经读过,variances在输出下,必须有一个负方差(显然即使是一个方差也可能导致残差协方差矩阵为正定义。我的问题是:

  • 那个负方差在哪里?!或者至少是什么导致了错误以及我如何才能删除它?

measurementInvariance其次,我确实从错误消息之前得到了一些输出。

  • 是否可以对所有卡方差异检验具有相同的意义?或者这仅仅是因为它是一个非常小的数字?

我真的会给予任何帮助。我是lavaan的新手,并尝试在理解方面做到最好,但在这里我需要一点推动。

谢谢!!

0 投票
1 回答
123 浏览

java - 泛型是不变的,但这编译没有错误

我收到类型不匹配错误,直到我将代码重构为:

  • 返回类型是Stream<Entry<E, Integer>>
  • 该例程结束时的流类型是Stream<SimpleImmutableEntry<E, Integer>>

正式类型参数E有这样的定义:

我不明白为什么编译器似乎可以接受。因为 Java 泛型是不变的,即使java.util.AbstractMap.SimpleImmutableEntryimplements java.util.Map.Entry,我也会说它Stream<SimpleImmutableEntry<>>不是返回类型的子类型,Stream<Entry<>>.

0 投票
0 回答
94 浏览

path - 路径分析不变性

我正在运行路径分析,以检查它在两种不同文化之间的不变性。当我分别检查每种文化的路径模型的拟合和参数时,我发现有些路径在两种文化中都很重要,而有些路径在一种文化中不重要,有些在另一种文化中不重要。所以我应该首先重新指定路径模型,通过从两个样本中删除不重要的路径,然后继续检查配置或度量不变性,或者如果拟合指数令人满意,是否可以继续分析而不改变路径模型?

0 投票
1 回答
109 浏览

c# - C# generic inheritance: invariance getting in the way of calling derived class

What I want to do:

This will not work because of invariance (if I understand invariance correctly): cannot convert Nation to TileGroup<TileGroup<TileBase>>

So I'll need to write it like this:

But when layers get stacked; this gets ugly fast:

This also makes adding layers between two existing layers difficult because one change in a low layer means changing all the higher layers.

So how exactly should I be doing this?


Sorry for the formulation, I know what I want, but not how I should explain it clearer than in this way.

0 投票
1 回答
901 浏览

python - mypy 泛型子类导致类型不兼容

我正在玩弄带有类型提示的幺半群。为此,我写了:

在子类中使用它时,例如

我明白了error: Argument 1 of "append" incompatible with supertype "Monoid"。由于List是 的正确子类Monoid,我希望它能够输入。我究竟做错了什么?

0 投票
0 回答
33 浏览

c# - 具有 out 方法参数时的 C# 无效方差错误

我看过类似的问题,尽管我的情况似乎有所不同。

对于此代码:

我在 C# 7.2 上收到此错误:

无效方差:类型参数“T”必须在“MyInterface.TrySomething(out T)”上始终有效。“T”是协变的。

这是一个错误,还是我错过了什么?我没有在T此处提供值,而是将其取出(即读取,因此在 . 中使用out方法参数修饰符TrySomething。那么,为什么它不编译?

0 投票
2 回答
268 浏览

scala - 为什么可以找到 Tree 的 Functor 实例,但找不到 Branch 或 Leaf?

我有以下仿函数定义:

为了:

为什么编译器抱怨:

所以我必须创建一个智能构造函数:

在这种情况下,什么是智能构造函数?