Function Scala按示例类型边界参数化函数编译器抱怨

Function Scala按示例类型边界参数化函数编译器抱怨,function,scala,type-bounds,Function,Scala,Type Bounds,我想按照本书第72页的练习实现一个类型参数化函数(使用过滤器实现): def孔[B]:列表[B]={ xs.filter(x=>true)匹配{ 案例Nil=>Nil 病例y::ys=>f(y)::孔(ys)(f) } } 然而,编译器(2.9.1)抱怨类型A未定义。显然不应该是这样,因为同一本书中的多个示例都使用了这种语法。通过将函数类型参数更改为[A,B您已经给出了答案:如果要将类型参数B与另一个类型参数A绑定,则必须将其添加到类型参数列表中: def forall[A, B <:

我想按照本书第72页的练习实现一个类型参数化函数(使用过滤器实现):

def孔[B]:列表[B]={
xs.filter(x=>true)匹配{
案例Nil=>Nil
病例y::ys=>f(y)::孔(ys)(f)
}
}

然而,编译器(2.9.1)抱怨类型A未定义。显然不应该是这样,因为同一本书中的多个示例都使用了这种语法。通过将函数类型参数更改为
[A,B您已经给出了答案:如果要将类型参数B与另一个类型参数A绑定,则必须将其添加到类型参数列表中:

def forall[A, B <: A](...)(...) = ...

此处参数y未定义,就像您的案例A未定义一样。

您已经给出了答案:如果要将类型参数B与另一个类型参数A绑定,必须将其添加到类型参数列表中:

def forall[A, B <: A](...)(...) = ...

这里的参数y是未定义的,就像您的例子中A是未定义的一样。

这不是一个变化;一直都是这样。我没有这本书,但不是这本书有误,就是这个方法出现在某个类中,比如
class ThingsWithA[A]…
所以你已经有了
A
作为一个类型参数。这不是一个改变;一直都是这样。我没有这本书,但不是这本书出错了,就是这个方法出现在某个类中,比如
class ThingsWithA[A]…
所以你已经有了
A
作为一个类型参数了。
def add(x: Int) = x + y