问题标签 [variance]

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 回答
238 浏览

overriding - C# 中的类型签名差异,关于覆盖

这次关于方差的问题略有不同。

我从实验中得知 C# 不允许您使用逆变函数覆盖虚函数?如果是这样,你怎么做,因为我不断收到“找不到合适的方法重载”。如果不是,为什么不呢?如果基类指定in的值永远是int,而子类可以取对象,问题出在哪里?

与返回类型相同,在它们的覆盖签名中应该是协变的

哪些语言允许您这样做?(C++/Java 我在看你)如果他们让你使用,variance 是什么类型?(返回类型/参数列表等)

你能有多个覆盖吗?只要签名在技术上是独一无二的,我不明白为什么不这样做。

为什么 C#/CLR 不支持方法覆盖协/逆变?

我读了这个,我看不到任何问题的答案。我知道通用方差,而且我知道它很棒。我想知道方法签名的差异,不仅在 C# 中,而且在 C# 中(即包括但不限于)。如果它不存在,我想对此进行确认和解释(它是实现细节吗?我的类型理论错了吗?只是 CLR/C# 碰巧不支持这个特定功能吗?是我没有的东西吗?没想到因为我不必处理实现CLR,因此不知道具体的复杂细节?)

0 投票
2 回答
191 浏览

generics - 抽象类/特征和不变函数

给定一个特征T

下面的课A

不是 的有效子类型T。的实现A.+过于严格,因为它只接受 type 的元素,A而 的签名T.+要求所有实现都能够接受 type 的对象,T而不仅仅是 type 的对象A。到目前为止,很合理。

如果我想让 的实现具有T限制性,我可以修改 和 的声明,T如下A所示

这显然会破坏类型签名。

有没有另一种方法来声明的实现T只需要与它们自己类型的对象兼容?

第一次编辑回复Landei的回答如下

虽然自我类型确实缩短了当前签名,但它们不会缩短T出现的其他签名,例如

0 投票
7 回答
3131 浏览

c# - 同一类型参数的协变和逆变

C# 规范声明参数类型不能同时是协变和逆变的。

这在创建协变或逆变接口时很明显,您分别用“out”或“in”装饰类型参数。没有同时允许两者的选项(“outin”)。

这种限制仅仅是语言特定的限制,还是基于类别理论的更深层次、更根本的原因使您不希望您的类型既是协变的又是逆变的?

编辑:

我的理解是数组实际上既是协变的又是逆变的。

0 投票
4 回答
12396 浏览

scala - Scala 中的 A<:B 和 +B 有什么区别?

有什么区别

在斯卡拉?

0 投票
2 回答
269 浏览

c# - 如何绕过不允许类型变化的 ref 参数?

假设我的数据访问层中有以下类结构:

这让我有我的模型可以实现的各种接口,以及处理这些接口的可重用行为:

并且经理很乐意接受这些,因为IBehavior<T>.

极好的。

但是现在,我想让每个行为也将一组 LINQ 过滤器应用于实体。我的第一个想法是将此方法添加到IBehavior<T>

...其中实施行为将Where自行决定将一组子句应用于枚举。

However, as it turns out, ref parameters don't allow type variation. I'm struggling to find a way to implement this kind of functionality while maintaining both type safety and the contravariant nature of the interface. Any ideas are appreciated.

0 投票
6 回答
857 浏览

c++ - 从文件差异计算中读取

@杰里棺材

我明白了逻辑,while(File>>value)//while 刚刚从文件中获取的输入是 true .... 进行计算。然而,当我实现这个时,计数器只变为 1,它的值非常高。有时是错的,但我不知道是什么。文件有效

here's the contents of the input file I am using "text.txt" 23244564 1486415241250586205864104818638684840823244564 1486415241250586205864104818638684840823244564 1486415241250586205864104818638684840823244564 1486415241250586205864104818638684840823244564 1486415241250586205864104818638684840823244564 1486415241250586205864104818638684840823244564 1486415241250586205864104818638684840823244564 1486415241250586205864104818638684840823244564 1486415241250586205864104818638684840823244564 14864152412505862058641048186386848408

0 投票
1 回答
234 浏览

c# - 类型参数、约束和协方差/逆变

假设我有以下类,它们根据要存储的对象具有不同的实现:

我想通过执行以下操作在上述类中使用另一个版本:

当然上面没有编译,因为第一个类有一个类型约束,而第二个没有。有什么办法可以:告诉编译器它不应该检查这个特定情况的约束(list = new ListOfPersistent<T>()),因为我知道它会是那种类型,或者做一些协变/逆变魔法,这样代码编译没有任何问题?

0 投票
2 回答
1923 浏览

statistics - “直观地”最小化方差

我们在资产管理中出现了一个问题。我认为(并希望)它为这个论坛提出了足够有趣的问题来考虑它。我们对文献进行了相当广泛的搜索,找到了围绕这个问题讨论的内容,但没有直接涉及这个问题。

背景

我们有资产的时间序列数据,我们从中计算相关矩阵。对于使用 Mathematica 的 5 个资产,它可能看起来像这样:

在资产管理中,人们想要多元化。如果投资组合中的两个或多个资产相关性太高,它会集中而不是分散风险。

我们想要什么

我们想要一种方法或方法来构建资产组合,以最小化投资组合的“集中”风险,同时始终在所有工具中持有一些头寸

我将通过以下几个示例来说明集中风险,但首先...

为什么这是一个有趣的问题或问题?

有几件事使这成为一个有趣且具有挑战性的问题:

虽然与“有效边界”相关,但我们对各个工具使用的未来表现没有任何假设。

最小化方差给出了答案,但不是一个直观令人满意甚至有用的答案。

主成分分析似乎是一种自然的方式来看待这个问题,但似乎也没有给我们我们需要的东西。

我们已经研究过使用熵最大化,但是当我们熟悉离散熵的一个人认为它看起来很有希望时,当我们尝试用连续熵来思考这个问题时,它被证明是一个死胡同。以下代码让我们了解了我们所看到的内容(不确定它是否实际运行):

Attilio Meucci 有一篇论文“管理多元化”和一些看起来很有希望的 MatLab 代码,

http://www.symmys.com/AttilioMeucci/Research/PublFinance/PublFinance.html

但在看过我的一位同事后评论它是:

他似乎在做我想做的大致相同的事情(在放弃这个想法之前),除了他有点作弊。他没有实际计算连续熵,而是将每个主成分视为离散赌注。但基本上,他的论文是我对多个相关硬币翻转所做的计算的改进版本。这迫使您从其他变量中获取熵,而不是从当前变量的额外数字中获取熵。

对非正态分布做他正在做的事情可能会更棘手,尽管我认为可以将生成模型用于“95% 标准正态分布,5% 非常糟糕”形式的情况。

集中风险示例

几个简单的例子来说明集中风险

如果我们在思想实验中查看 3 种资产的投资组合,最容易理解我们想要实现的目标。假设 2 个工具的相关性为 1 (100%),第三个为 0,其相关矩阵如下所示:

在这种情况下,从我们的角度来看,将 25% 放在 2 只相关股票中,将 50% 放在不相关股票中是有意义的。

这抵消了集中于相关工具的风险,同时认识到 100% 相关资产实际上仍然是不同的工具,其相关性在未来可能会发生变化。

有人可能会认为,由于具有 100% 相关性的两种资产移动相同,那么广泛的可能分配同样可以满足我们的目的,例如:

...或主题的任何此类变化。

但是,由于我们不知道它们未来的相关性将如何演变,我们认为最好和最直观的解决方案仍然是:

另一个例子

在由 5 个资产组成的投资组合中,其中 4 个具有 100% 的相关性,1 个具有 0% 的相关性,相关矩阵如下所示:

我们想要的投资组合分配将具有以下比例:

12.5%、12.5%、12.5%、12.5%、50%

当然,现实世界给我们带来了更大的复杂性。

我们尝试过的事情

最小化方差(有希望但不起作用)

有人建议最小化方差来做到这一点,但正如人们所看到的那样,它不会产生一个直观的解决方案:

一些说明这一点的 Mathematica 代码如下:

这看起来不错。它给了我们:

25%、25%、50%

但...

对于 5 项资产:

不如它给我们的那么好:

因此,即使对于这种简单(如果是人为的)情况,最小化方差也不起作用,更不用说更现实的情况了。

一个有前途的解决方案

我们讨论的一位贡献者提出了一种有前途的方法 - 至少对于没有任何负相关的情况。也许它会导致某人提出更完整的解决方案。

再次使用 Mathematica 代码:

正是我们想要的。注意:对于那些不熟悉 Mathematica 代码的人,函数:“Tr”查找矩阵的迹,“/@”将函数映射到列表或矩阵。其余的可能是有道理的。

四个资产的另一个示例:

再次,正是我们想要的。

这比最小化方差更好,但在一个更真实的例子(文章中描述的第一个例子)中,我们得到了一些不起作用的东西:

在这种情况下,我们为第 4 个资产分配了负数 (-0.0541658),这对于我们想要实现的目标没有意义。

结论

所以,我们需要一种 MinimizeVarianceIntuitively 函数。我希望所有这些都足够清楚地描述了我们想要实现的目标。以完全不同的方式解决这个问题或扩展我们已经尝试过的任何事情的任何建议或想法都非常感谢。

随便看这个的人总是建议CAPM(资本资产定价模型)这样做。它不是。考虑到上述相关性将资产与资产相关联,而不是每个资产与“市场”相关联,因此它没有可使用的“贝塔”。此外,所描述的问题没有假设回报或使用无风险利率或价格的正态分布。我可以看到 CAPM 看起来像是一种方法,但我看不出它是如何应用的。

非常感谢,

阿伦·加拉帕塔

0 投票
2 回答
233 浏览

c# - 行动中的逆变 - C#

我有这样的类层次结构

我想创建一个动作 Action lamda,它有一个 CalendarEventBase 类型的通用类型参数,我可以将它分配给以下不同的方法:

我创建了以下非法分配:

编译器抱怨它期望使用 void(CalendarEventBase) 作为签名的方法。我对此感到惊讶,因为我认为它会接受更派生的类型。

为了解决这个问题,我创建了以下委托来完成我的任务:

我的问题是,我是否可以在不创建额外代表的情况下完成任务?我以为我可以创建一个 Action 实例。

任何帮助或指示,非常感谢。

0 投票
11 回答
40167 浏览

algorithm - 滚动方差算法

我正在尝试找到一种有效的、数值稳定的算法来计算滚动方差(例如,20 周期滚动窗口上的方差)。我知道Welford 算法可以有效地计算数字流的运行方差(它只需要一次通过),但不确定这是否可以适用于滚动窗口。我还想要解决方案来避免John D. Cook在本文顶部讨论的准确性问题。任何语言的解决方案都可以。