问题标签 [generic-constraints]

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 投票
2 回答
269 浏览

c# - C# - 即使在正确的通用约束之后,堆栈推送操作也不起作用

问题:

在 Wash() 方法中,我正确地将通用参数“T”设置为“动物”类型或可以从“动物”派生。那么为什么我不能进行推送操作来插入 Animal 或 Bear 的对象呢?

为什么会animals.Push(new Animal()); animals.Push(new Bear());导致编译错误?

0 投票
1 回答
144 浏览

generics - 向量运算的 F# 类型约束

我想在 F# 中编写一些通用函数和类型来处理向量。我有多种具有静态(+)(*)运算符的不同数据类型,因此我可以将它们相加并乘以标量(float现在是 s )。

例如,我已经成功Vec2构建了一个可以编写的类

假设我也有一个Vec3或任何其他类型的向量。这是我想写的两个示例(伪代码):

向量上的通用函数

我认为这对于 assert'V具有的静态解析类型约束是可能的(+)(*)但我无法让它工作。如果我可以将我的类型约束命名如下,那就太好了。

有没有真正有效的替代方案?

本身是向量类型的泛型类型

对于任何类型'T和表示向量的类型,我们可以像向量一样'V添加和标量乘法函数。'T -> 'V我想建立一个像

举个简单的例子,f : VecFunc<int,Vec2>可以存储一个函数,该函数接受一个int x并返回一个Vec2两个分量都等于的函数float xEval也许我们可以通过调用一个方法来评估底层函数:

我想把VecFunc<int,Vec2>它当作一个向量类型,给它(+)(*)操作,这样我就可以计算

或将其与第一个示例结合使用:

有没有办法使用 F# 接口或类型参数来实现这些结果?

0 投票
1 回答
213 浏览

rust - Rust 等效于具有相同泛型参数约束的 Swift 扩展方法?

在 Swift 中,我可以将方法添加到具有参数相等约束的泛型类型。

如何在 Rust 中做到这一点?


更新

此功能称为带有通用 Where 子句的扩展

我认为这与 Rust 的implwithwhere子句基本相同,但没有明确的特征。

等效于(没有显式特征)

因此,我认为这个 Rust 代码可以工作,但它不会出现错误。( equality constraints are not yet supported in where clauses (see #20041))

0 投票
0 回答
56 浏览

generics - Groovy - 通用约束中的特征

我在 Groovy 中使用 Trait 作为“扩展”约束时遇到问题。问题可以总结为:

以下作品:

以下没有:

这对我来说没有任何意义,也许是 Groovy 中的错误?我在 2.5.8 和 3.0.0 (rc) 版本中都尝试了 groovyc 和 groovy。

感谢您的帮助,特征对我非常有用,我宁愿不引入虚拟接口作为通用约束 - 即使这是一些解决方法。

0 投票
1 回答
256 浏览

c# - 列表和集合的通用约束

我有一个看起来像这样的通用方法:

现在我希望能够调用这个方法,其中集合参数可以是 aList<T>或 a HashSet<T>。当前代码不满足这一点,因为我要传递的参数不继承ICollection接口。现在有什么方法可以通过简单的约束来实现吗?

0 投票
2 回答
118 浏览

c# - 按位运算符的通用约束

所以我有一个看起来像这样的类:

我有一个使用TKey泛型的方法,如下所示:

现在我需要设置约束以确保它TKey是一个数值,以便使用按位运算符。无论如何,您不能设置约束以确保它是一个数值,因为short,int,double,...不要实现类似INumeric.

现在的问题是,这是否可能只有约束?

0 投票
1 回答
47 浏览

c# - 仅传递一个定义其他泛型的泛型类型

我有以下方法:

以及一个IParser<T1, T2>接口和一个实现它的类:

现在我的问题是是否可以只传递TParser给该方法,因为有一个约束集有点定义T1T2. 那么是否可以执行以下操作:

我想这是不可能的,但会有类似的东西吗?

0 投票
0 回答
48 浏览

swift - 为什么泛型参数上的 AnyObject 约束不允许将该泛型参数用作约束?

在另一个 SO 帖子中玩代码时,我发现了这种有趣的行为。

众所周知,a 的类型weak var需要是类类型,而泛型约束中使用的类型需要是类类型或协议类型。

因此,这不会编译:

根据这篇文章,我可以设置一个AnyObject约束(或任何具有: class约束的协议)T来消除第一个错误:

但是第二个错误仍然存​​在:

类型“U”受限于非协议、非类类型“T”

编译器似乎在这里撒谎。通过删除第一个错误,编译器刚刚承认它T确实是一个类类型,现在它说它不是。

为什么会这样?他们只是没有设计这个功能吗?

0 投票
1 回答
56 浏览

c# - 有没有办法避免在我的 Extension 方法中传递两个泛型参数?

我有一类安装程序类型,其中 TModel 有一个约束。我想创建一个带有类型签名的扩展方法:\

目标是最终我可以使用简单的函数调用该函数installer.DoRepetitiveStuff<TOtherObject>();

出于某种原因,当我在另一个文件上调用该函数时。它抱怨没有任何扩展方法可以接受现有的安装程序......我需要将它用于:

任何人都知道为什么?

0 投票
1 回答
60 浏览

typescript - 具有相互依赖的默认值的多个通用约束

这是我拥有的 Typescript 接口/类结构:

我想提供默认值,以便我没有为我的选项和调用提供具体类型。我定义类型的方式会导致编译错误(ts2744 错误)。

我还想避免交换我的泛型类型(带有约束和默认值),以便我将第一个泛型类型保留为选项并调用第二个。

有没有办法首先定义带有约束的泛型类型,然后设置它们的默认值?

你可以检查这个游乐场链接