问题标签 [type-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 投票
1 回答
124 浏览

c# - 如何将 T 约束为无符号积分?

我一直在尝试以下

使用此调用代码

但我得到这个编译器错误

0 投票
2 回答
1141 浏览

haskell - 如何将两种类型约束与逻辑或 Haskell 结合起来?

在 Haskell 中,我们能够将类型的约束与逻辑与结合起来。

考虑以下

或更复杂的

我想知道如何在 Haskell 中逻辑地或两个约束在一起。

我最接近的尝试是这个,但它并不完全奏效。在这次尝试中,我用标签来具体化类型约束,而不是用隐式参数去具体化它们。

它几乎可以工作,但用户必须应用最后一部分,编译器应该为我做这件事。同样,当两个约束都满足时,这种情况不会让人们选择第三种选择。

我怎样才能在逻辑上或两个约束在一起?

0 投票
2 回答
313 浏览

haskell - 默认约束类型被忽略

我在定义默认约束时遇到了一个奇怪的问题。如果约束是单位,则不选择默认实例。在所有其他情况下,它按预期工作。

有人可以澄清类型检查器行为的原因吗?

0 投票
2 回答
2532 浏览

types - OCaml:签名中的类型约束

在我的代码中,我有一个提供基本读/写操作的数据库访问上下文,称为CouchDB.ctx. 然后,我的应用程序中的各种模块使用附加功能扩展该类,例如Async.ctx.

我正在实现一个Cache包裹在模块周围的Source模块。Cache模块函数采用上下文参数并操作数据库。然后将一些调用Source与上下文一起转发到模块。

我需要按照以下方式定义一个仿函数:

问题是我无法表达Source模块使用的上下文应该是CouchDB.ctx. 上面的代码返回错误:

如何表达这种类型约束?

0 投票
1 回答
904 浏览

c# - 通用参数基类型:“没有从 B 到 A 的隐式引用转换”

在扩展中:

我这样称呼这个扩展:

然而,我得到了这个例外:“没有从'B'到'A'的隐式引用转换。”

我究竟做错了什么?

谢谢。

编辑

这是扩展的代码

0 投票
3 回答
1654 浏览

c# - 是否可以将 C# 泛型方法类型参数约束为“可分配自”包含类的类型参数?

我怀疑答案是否定的,但我想知道是否可以这样做:

在上面的(非工作)示例中,我的意思是限制TSomeInterface它可以是任何基类、实现的接口,或者(如果你真的想花哨的话)隐式转换MyGenericClass.

注意: 我怀疑这从未在 C# 中实现的原因是通用约束并不是真正的代码契约,这就是我在这里尝试使用它们的方式。我真的不在乎是什么类型TSomeInterface,只要它是由TSomeClass.

到目前为止,我已经一起破解了这个:

这或多或少强制了我想要的约束(TSomeClass必须继承自,或者在接口的情况下,实现,TSomeInterface),但是调用它非常笨拙,因为我必须指定TIntermediateType(即使我真的希望它评估TSomeClass):

此外,上述技巧被破坏了,因为调用者理论上可以将 的子类指定TSomeClass为第一个类型参数,其中只有子类实现TSomeInterface.

我想这样做的原因是我正在为 WCF 服务编写流利的工厂模式,并且我想防止调用者(在编译时)尝试使用服务类没有的合同创建端点' t 实施。我显然可以在运行时检查这个(WCF 实际上是为我做的),但我是编译时检查的忠实粉丝。

有没有更好/更优雅的方式来实现我在这里追求的目标?

0 投票
3 回答
801 浏览

haskell - 如何对关联数据进行约束?

我想说的是,关联的数据始终是某个类的实例。

b但是,不在范围内的自由变量阻止了我这样做。一种解决方案是从 复制类函数Context,但它看起来很难看。

是否有一种惯用的方法来对具有头中未提及的变量的关联数据类型施加约束?

编辑:我想保持与 GHC 7.0.3 的兼容性

0 投票
2 回答
5698 浏览

java - 枚举

我正在尝试拥有一组扩展通用接口的枚举,例如:

然后通过强制变量是枚举实现接口来在其他地方使用它。所以有点类似..

但是,到目前为止,我似乎必须强制转换 fe 才能将其视为实现接口,即

虽然这应该是安全的......它似乎不是最理想的,我可能会忽略一些东西。当然,如果我尝试仅将参数作为 Fooable 传递,那么我最终将其转换为将其视为枚举,这不仅没有收获,我现在甚至都不安全。请参阅以下内容:

有什么我忽略的或者是

与我得到的“好”解决方案一样接近吗?

我对 Java 比较陌生,并且仍然在尝试像 C 或 C++ 一样使用它,所以如果我把它当作锤子而不是锯子来对待,或者忽略一些愚蠢简单的东西,请随时指出:)

0 投票
2 回答
124 浏览

c# - 使用泛型变量作为参数调用重载函数

我想扩展 BinaryWriter 类以便能够将列表写入流。我想用多种类型的列表来做到这一点。我将此通用功能设置为扩展

这是可能吗?我知道 write 可以处理所有内置类型。我知道有能力将 T 限制为某些类型,但我无法为 int 和 double 做到这一点。

我只需要它来处理整数、双精度和字节。

0 投票
1 回答
116 浏览

haskell - 模棱两可的类型变量

我写了一个小程序,它只计算一个数字(Int)中有多少个。当我尝试执行它时,haskell 抱怨变量约束模棱两可。我知道它来自地板的使用。我还阅读了有关 stackoverflow 的一些答案。但我并没有真正找到解决方法。这是我的代码:

有什么建议吗?