问题标签 [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.
c# - C# - 即使在正确的通用约束之后,堆栈推送操作也不起作用
问题:
在 Wash() 方法中,我正确地将通用参数“T”设置为“动物”类型或可以从“动物”派生。那么为什么我不能进行推送操作来插入 Animal 或 Bear 的对象呢?
为什么会animals.Push(new Animal()); animals.Push(new Bear());
导致编译错误?
generics - 向量运算的 F# 类型约束
我想在 F# 中编写一些通用函数和类型来处理向量。我有多种具有静态(+)
和(*)
运算符的不同数据类型,因此我可以将它们相加并乘以标量(float
现在是 s )。
例如,我已经成功Vec2
构建了一个可以编写的类
假设我也有一个Vec3
或任何其他类型的向量。这是我想写的两个示例(伪代码):
向量上的通用函数
我认为这对于 assert'V
具有的静态解析类型约束是可能的(+)
,(*)
但我无法让它工作。如果我可以将我的类型约束命名如下,那就太好了。
有没有真正有效的替代方案?
本身是向量类型的泛型类型
对于任何类型'T
和表示向量的类型,我们可以像向量一样'V
添加和标量乘法函数。'T -> 'V
我想建立一个像
举个简单的例子,f : VecFunc<int,Vec2>
可以存储一个函数,该函数接受一个int
x
并返回一个Vec2
两个分量都等于的函数float x
。Eval
也许我们可以通过调用一个方法来评估底层函数:
我想把VecFunc<int,Vec2>
它当作一个向量类型,给它(+)
和(*)
操作,这样我就可以计算
或将其与第一个示例结合使用:
有没有办法使用 F# 接口或类型参数来实现这些结果?
rust - Rust 等效于具有相同泛型参数约束的 Swift 扩展方法?
在 Swift 中,我可以将方法添加到具有参数相等约束的泛型类型。
如何在 Rust 中做到这一点?
更新
此功能称为带有通用 Where 子句的扩展。
我认为这与 Rust 的impl
withwhere
子句基本相同,但没有明确的特征。
等效于(没有显式特征)
因此,我认为这个 Rust 代码可以工作,但它不会出现错误。( equality constraints are not yet supported in where clauses (see #20041)
)
generics - Groovy - 通用约束中的特征
我在 Groovy 中使用 Trait 作为“扩展”约束时遇到问题。问题可以总结为:
以下作品:
以下没有:
这对我来说没有任何意义,也许是 Groovy 中的错误?我在 2.5.8 和 3.0.0 (rc) 版本中都尝试了 groovyc 和 groovy。
感谢您的帮助,特征对我非常有用,我宁愿不引入虚拟接口作为通用约束 - 即使这是一些解决方法。
c# - 列表和集合的通用约束
我有一个看起来像这样的通用方法:
现在我希望能够调用这个方法,其中集合参数可以是 aList<T>
或 a HashSet<T>
。当前代码不满足这一点,因为我要传递的参数不继承ICollection
接口。现在有什么方法可以通过简单的约束来实现吗?
c# - 按位运算符的通用约束
所以我有一个看起来像这样的类:
我有一个使用TKey
泛型的方法,如下所示:
现在我需要设置约束以确保它TKey
是一个数值,以便使用按位运算符。无论如何,您不能设置约束以确保它是一个数值,因为short,int,double,...
不要实现类似INumeric
.
现在的问题是,这是否可能只有约束?
c# - 仅传递一个定义其他泛型的泛型类型
我有以下方法:
以及一个IParser<T1, T2>
接口和一个实现它的类:
现在我的问题是是否可以只传递TParser
给该方法,因为有一个约束集有点定义T1
和T2
. 那么是否可以执行以下操作:
我想这是不可能的,但会有类似的东西吗?
swift - 为什么泛型参数上的 AnyObject 约束不允许将该泛型参数用作约束?
在另一个 SO 帖子中玩代码时,我发现了这种有趣的行为。
众所周知,a 的类型weak var
需要是类类型,而泛型约束中使用的类型需要是类类型或协议类型。
因此,这不会编译:
根据这篇文章,我可以设置一个AnyObject
约束(或任何具有: class
约束的协议)T
来消除第一个错误:
但是第二个错误仍然存在:
类型“U”受限于非协议、非类类型“T”
编译器似乎在这里撒谎。通过删除第一个错误,编译器刚刚承认它T
确实是一个类类型,现在它说它不是。
为什么会这样?他们只是没有设计这个功能吗?
c# - 有没有办法避免在我的 Extension 方法中传递两个泛型参数?
我有一类安装程序类型,其中 TModel 有一个约束。我想创建一个带有类型签名的扩展方法:\
目标是最终我可以使用简单的函数调用该函数installer.DoRepetitiveStuff<TOtherObject>();
出于某种原因,当我在另一个文件上调用该函数时。它抱怨没有任何扩展方法可以接受现有的安装程序......我需要将它用于:
任何人都知道为什么?
typescript - 具有相互依赖的默认值的多个通用约束
这是我拥有的 Typescript 接口/类结构:
我想提供默认值,以便我没有为我的选项和调用提供具体类型。我定义类型的方式会导致编译错误(ts2744 错误)。
我还想避免交换我的泛型类型(带有约束和默认值),以便我将第一个泛型类型保留为选项并调用第二个。
有没有办法首先定义带有约束的泛型类型,然后设置它们的默认值?
你可以检查这个游乐场链接