问题标签 [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 回答
1543 浏览

java - 为什么& SomeInterface> 编译,但没有>?

我不明白为什么 method2 不编译而 method1 编译。我正在使用带有 JavaSE 1.7 的 Eclipse,并且在方法 2 上出现以下错误:

此行有多个标记

  • Enum<T> 类型不是接口;它不能指定为有界参数

  • 有界不匹配:类型 T 不是 Enum<E> 类型的有界参数 <E extends Enum<E>> 的有效替代品

0 投票
2 回答
119 浏览

c - 模运算符与零(re:arc4random_uniform 源)

发现自己正在查看 arc4random_uniform 源 ( http://bxr.su/o/lib/libc/crypt/arc4random_uniform.c )

我的问题与以下行有关(评论是他们的原始评论):

现在,我不是数学天才,但肯定 -N%N 总是等于零。所以为什么不写

0 投票
2 回答
499 浏览

scala - Scala 类型上限

我得到:

我的直觉表明这应该有效,因为T它的类型上限比O.

**** 编辑 ****

好的,让我们看看上面的例子。

超类A提供方法距离。我想在类中使用findNNseq[B]功能Cdistance应该有效,因为它适用于A

根据提供的反馈,无法简化上述类型签名。

0 投票
1 回答
114 浏览

scala - Scala 中的类型推断和类型边界

考虑以下类:

现在我想创建一个包装器对象,它接受一个二进制函数Type或其派生类型,让我们从:

Fct我可以使用apply 方法实例化该类_+_,但我无法使用Subtype该类传递函数,这是预期的:

现在我们可以定义Fct使用泛型和类型边界来接受子类型:

现在f2按预期工作,但f1不再有效,我不明白为什么:

是否有可以同时接受f1and的语法f2

编辑

(回复 mz)有没有办法解决工厂的差异问题?就像是:

0 投票
2 回答
656 浏览

scala - scala 类型的上限和下限

考虑以下层次结构:

我想编写一个只接受类型C2C3. 为此,我想到了以下几点:

我期望以下行为

问题是用 调用它时C4,我不想允许,但编译器接受。我理解这C4 <: C2是正确的,C4可以看作是C3. 但是在指定 bound 时[C >: C3 <: C2],我希望编译器找到一个C同时尊重两个边界的,而不是一个一个。

问题是:有什么方法可以实现我想要的,如果没有,编译器是否试图避免与此不一致?

编辑:从答案中我意识到我的假设是错误的。C4总是满足C >: C3,所以这两个界限确实受到尊重。我的用例的方法是C3 <:< C.

0 投票
1 回答
49 浏览

scala - 编译器似乎忽略了类型细化中的类型绑定

下面代码中的类型细化似乎表明路径相关类型vt.ValueT包括this.type

但 Scala 编译器(版本 2.11.2)说:

有什么理由在这里推断this.type <: vt.ValueT是非法的吗?还有另一种方法可以告诉编译器它需要知道什么吗?

我已经尝试将类型改进放在vt. 结果类型为volatile的编译器对象。也许这就是问题的线索。

细化{ type ValueT = this.type }生成相同的错误消息。

0 投票
1 回答
333 浏览

scala - 使用来自 Scala 的 Quartz 的类型绑定问题

我正在尝试重新安排工作,并且我已经像这样定义了我的方法:

这给了我以下错误:

错误:(33, 55) 类型参数 [org.quartz.SimpleTrigger] 不符合方法 withSchedule 的类型参数边界 [SBT <: ?0] val up = oldTrigger.getTriggerBuilder.withScheduleSimpleTrigger.build()

现在看签名withSchedule

T是类的类型参数,withSchedule它看起来像class TriggerBuilder<T extends Trigger>. soT应该由返回的实例的类型参数定义getTriggerBuilder,这里应该是TriggerBuilder<SimpleTrigger> getTriggerBuilder()Ta也是SimpleTrigger。在Trigger接口getTriggerBuilder中是这样定义的: TriggerBuilder<? extends Trigger> getTriggerBuilder()simpleSchedule返回一个SimpleScheduleBuilder(扩展ScheduleBuilder<SimpleTrigger>)。

我在这里的理解是SBT(即SimpleTrigger,如果我们查看错误)应该扩展一个扩展类Trigger。这里的问题是我们有SimpleTrigger <: SimpleTrigger。完全不确定我读对了。

如果我不输入withSchedule,我最终会遇到同样的错误,再加上这个:

错误:(37, 46) 类型不匹配;发现: org.quartz.SimpleScheduleBuilder 需要: org.quartz.ScheduleBuilder[SBT] .withIntervalInMinutes(randomInterval).repeatForever)

有人可以帮我吗?作为记录,官方 Quartz 示例也没有编译(同样的错误)。

0 投票
1 回答
73 浏览

rust - 将特征绑定添加到自身时意味着什么?

在 Rust 文档中,我从Option中看到了类似这样的实现:

界是什么Copy + Copy意思?它只是一个文档怪癖吗?

0 投票
2 回答
41 浏览

java - 类型边界:传播具有多个边界的参数

考虑以下(不可更改的)API:

现在我编写了一个接受一般的类,Foo但如果该参数也是 a Bar,我想doFoo在某些方法中另外执行:

的示例用法Holder

正如代码注释中提到的,我在 Holder 类中调用 doFoo() 时遇到问题,因为当时不知道可以扩展Foo 实现的确切类型Bar,所以我不能简单地将它转换为这样的类型。有没有办法在不改变 和 的界面的情况下解决这个Holder问题?FooBar

0 投票
1 回答
225 浏览

scala - 如何检查某些类型是否确认 Scala 宏中的泛型类型边界?

我在某些课程中有以下方法:

我正在使用 Scala 宏处理该方法。此方法的提取类型参数m.typeParams打印为type G <: GenericTrait. m在哪里MethodSymbol

我如何测试其他类型是否符合这种类型的界限?例如,这不起作用: