scala中>的目的或意义是什么?

时间:2016-09-11 13:56:16

标签: scala

如List.contains,这是来自scala api的源代码。

this

我理解代码间理论,但是关于类型 def contains[A1 >: A](elem: A1): Boolean = { var these = this while (!these.isEmpty) { if (these.head == elem) return true these = these.tail } false 是什么?

我猜A1 >: A就像>:或类似限制输入参数的类型一样?

有些人可以提供简明的解释或一些文档,以便我可以进行一些研究

2 个答案:

答案 0 :(得分:3)

意思是:

A1A最近的共同祖先,并提供了参数类型。

目的:

由于List被声明为List[+A],其中+A表示“类型A的协变”,因此不允许使用A作为参数类型:

scala> :pa
// Entering paste mode (ctrl-D to finish)

class List[+A] {
  def m(x: A) = x
}

// Exiting paste mode, now interpreting.

<console>:15: error: covariant type A occurs in contravariant position in type A of value x
         def m(x: A) = x

<强>更新

天真的解释为什么不(只是一个猜测,很难证明,因为编译器不会允许它):

class List[+A] {
  def m(x: A) = x
}

class Fruit
class Apple extends Fruit
class Pear extends Fruit

// list is covariant, which means
// List[Fruit] is a supertype of List[Apple]
val l: List[Fruit] = new List[Apple]
// i.e. l.m has to accept Fruit
l.m(new Pear) // Apple?

实际上:

class List[+A] {
  def m[A1 >: A](x: A1) = x
}

...

l.m(new Pear) // Fruit, the nearest common ancestor of Apple and Pear

答案 1 :(得分:0)

A >: B表示BA

的较低类型范围