Scala 此类型参数语法不使用';不编译?

Scala 此类型参数语法不使用';不编译?,scala,generics,types,scala-2.10,Scala,Generics,Types,Scala 2.10,假设我有: class Class[CC[A, B]] class Thing[A, B <: Int] class Test extends Class[Thing] // compile error here class类[CC[A,B]] 阶级事务[A,B:Nothing原因在编译器消息中给出。在类中,您期望一个不受限制的CC,而东西有一个限制,即第二个类型参数必须是详细阐述了Petr Pudlák的解释,下面是我假设发生的事情:编译器试图统一CC[A,B]与事物[A,B在上一个示

假设我有:

class Class[CC[A, B]]
class Thing[A, B <: Int]
class Test extends Class[Thing] // compile error here
class类[CC[A,B]]

阶级事务[A,B:Nothing原因在编译器消息中给出。在
类中,您期望一个不受限制的
CC
,而
东西
有一个限制,即第二个类型参数必须是
详细阐述了Petr Pudlák的解释,下面是我假设发生的事情:编译器试图统一
CC[A,B]
事物[A,B在上一个示例中,您有类型参数
B
和类型成员
B
。它们具有相同的名称(因此只有一个可见),bot,它们是不同的。@senia,有没有一种情况下使用相同的名称是有用的?@huynhjl:我想没有。但在某些情况下,隐藏是有用的:你可以重用名称。在隐含的情况下,隐藏也有一些部分有用的滥用:参见。@senia你应该把你的评论变成一个答案,这样它才能被接受。你有权利答案很简单。@Jean Philippellet:谢谢,但这不是答案。我已经解释了为什么最后一个代码样本可以编译,而不是为什么第一个代码样本不能编译。我不相信你有一个有效的例子来说明为什么“允许编译这样的类型约束”将失败..但由于它甚至无法编译,我很难确切说明它的错误原因!但我还是会尝试:
def(b:b).
是在
b的上下文中,我不确定我是否遵循了why
new Test().t.f(true)
不会在编译时被捕获。在
测试中,
t
的类型不需要类型参数吗?如果需要,则不会
newtest()。t
返回
东西[A,B@RichardSitze@eddiemundorapundo我的思路如下:如果编译器选择
Any,Any
作为
东西
的缺失参数……扩展类[东西]
,因为
类[CC[A,B]]
没有明确的上限,如果编译器没有引发错误,那么实际上
valt:Thing[Any,Any]
因此
f(b:Any)
Test().t.f(true)
就可以了。当然,因为它没有编译,我们(至少,我)由于手头没有正式的Scala类型规则,很难说它是否真的会以这种方式工作。我不清楚为什么会有这种限制;为什么编译器不能在下限处协调两者?
class Class[CC[A, B]]
class Thing[A, B] {
  type B <: Int
}
class Test extends Class[Thing]
class Class[CC[A,B <: Int]]
class Thing[A, B <: Int]
class Test extends Class[Thing]
class Thing[A, B <: Int] {
  def f(b: B) = 2 * b
}
class Class[CC[A,B]] {
  val c: CC
}
class Test extends Class[Thing] {
  val t: Thing
}
new Test().t.f(true)