问题标签 [type-bounds]

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

scala - Scala 中的类型 - 下界

在下面的代码上。

我的期望是它T必须是Bor类型A,所以调用 tolowerBound(new D)可能不应该编译(?)。与上限类似的实验给了我预期的类型检查错误。

感谢您提供提示。

0 投票
1 回答
467 浏览

oop - OOP Fortran,不同文件中的类型和过程

我想知道是否可以将实际的子例程放在类型绑定过程和不同文件中的类型定义后面。例如:

档案一:

文件 B:

这不起作用,因为当先编译文件 A 然后编译文件 B 时,ifort会给出错误消息:

主要原因是,对于某些类型,我必须编写大量类型绑定的过程,并且有些文件扩展了数百行,这使得工作非常乏味。最终目标是将每个子例程放入不同的文件中。

有任何想法吗?

0 投票
0 回答
128 浏览

scala - 具有边界的泛型类的 Scala 类型不匹配

我一直在尝试一些小东西来尝试理解 Scala 的 Variance 和 Type Bounds 语法。

但是,当我尝试创建对象的实例时,我得到:

我不太明白编译器告诉我什么?

tks

0 投票
4 回答
2892 浏览

scala - Scala 协方差和下限类型解释

关于使用下限创建新的不可变类型的方法,我试图了解协方差

我知道类型参数T不能在 append 方法中使用,因为它违反了规则,但是如果我说一个Customer类和子类,Student我仍然可以创建类型U Student

我可以看到这是可行的,但为什么这不违反规则?我可以理解如果我有一个Students 列表然后添加了 aCustomer我只能返回一个Customers 列表,因为它不允许将 aCustomer分配给 a Student,因为它是父类型。但是为什么我可以使用Student

我错过了什么?

谢谢布莱尔

0 投票
1 回答
2871 浏览

interface - Fortran 中的接口类型绑定过程

我试图将interfaced 过程定义为 Fortrantype定义中的类型绑定过程,但它似乎不像人们期望的那样工作。考虑以下模块:

以及使用该模块的相应程序:

我希望它可以编译,结果应该是 4 和 11。但是,gfortran 报告以下错误:

一种解决方法是使用generic类型绑定过程而不是interfaced 过程,以便模块如下:

这按预期工作。但是,我不能使用generic程序。以上只是演示问题的简化示例,但在我的实际代码中,“add_them”不能是generic过程,因为“foo”实际上是派生类型,而“add_them”覆盖了父类型中定义的过程;gfortran(至少)不允许generic过程覆盖基本过程。为了绕过这个限制,我想我应该改用 an interface,但正如你在上面的例子中看到的,虽然 'add_them' 定义正确,编译器抱怨“'add_them' 必须是模块过程或具有显式的外部过程界面”。

任何帮助,将不胜感激; 提前致谢。

0 投票
1 回答
84 浏览

scala - Scala 类型边界与 Foo[_]

我有一个class Bar[T <: Foo]。typeBar[_ <: Foo]和 和有什么不一样Bar[_]?我没有看到任何语义上的差异,因为我不能写任何类似new Bar[String]("asdf").

但是,scalac确实将它们区分开来。看起来它忘记了界限并认为Bar[_]是 aBar[_ <: Any]而不是Bar[_ <: Foo]

请注意,这在 Java 中按预期工作,与 Scala 不同:https ://gist.github.com/v6ak/7847548 。我想知道 Java 和 Scala 之间是否存在我不知道的重要语义差异。我知道存在一些差异,例如在具有原始类型的泛型中(尤其是与数组一起使用时),但我不知道与此问题相关的任何内容。

为了让事情变得更奇怪,我从提到的 scala 代码(通过reJ)中反汇编了字节码,禁用了泛型识别并发现方法 foo 总是返回一个 Foo

(我没有使用 javap 因为我不能在那里禁用泛型识别。)

0 投票
2 回答
220 浏览

scala - 存在类型或类型参数绑定失败

我有一个 F 有界类型Sys

还有一些将其作为类型参数的特征:

假设我有一个要使用 a 调用的方法Foo

假设我有一个模型更新类型和一个子类型,它带有Foo

注册模型观察者的辅助函数:


现在以下失败:

如果Sys, Foo, invoke, Update,Openedobserve被给定,我如何修复偏函数。允许将值或类型成员添加到Foo.

0 投票
0 回答
64 浏览

scala - 指定下限约束还允许您利用在下限上定义的成员?

我正在阅读“深入Scala”一书,发现了一些我无法理解的观点。

首先,让我们看一下书中关于“下界”和“上限”的例子:

我能理解他们。

但我在第 135 页看到这句话:

指定下限约束还允许您利用在下限上定义的成员。上限约束并不意味着类型上可能包含哪些成员,但在组合多个参数化类型时很有用。

我在想是不是错了?它应该是:

指定上限约束还允许您利用在上限上定义的成员。下限约束并不意味着某个类型上可能有哪些成员,但在组合多个参数化类型时很有用。

不应该吗?

在我看来,

test1lower boundtest2upper bound,对吧?

0 投票
1 回答
77 浏览

scala - 为什么“K <:T”中的T不能是协方差?

斯卡拉代码:

它们可以被编译。

但是当T是协方差时,下面的代码无法编译:

编译器打印:

右边的类型<:不能是协变的?为什么?

0 投票
1 回答
81 浏览

scala - scala:二进制操作的类型界限

问题很简单,我有一个对象用两个参数进行二元运算。我只想添加具有相同类型的燃料,如下所示:

用它:

编译错误:

主要问题是 add 和fuelMonoid 都无法识别我们正在处理相同类型的项目。编译器无法解析类型约束,并推断 Nothing。

为了完成,这里是 Monoid,没什么特别的: