0

このコレクションのアイテムを逆にしたいので、それが の一部でありTraversable、そのサブタイプのいずれかであることを要求し、Traversable を返すようにすることにしましたが、それにもバリアンスを使用する必要があると思います、しかし、現時点では、Scala 2.10.0-M5 を使用してコンパイラ エラーが発生します。

trait Polynomials {
    def coefficients[+A <: Traversable[T]](x:A):Traversable[A] =  x.foldLeft(Traversable[A]())((b,a) => a :: b)

}

これらは私が得ているエラーであり、何が間違っていたのかわかりません。

Description Resource    Path    Location    Type
']' expected but identifier found.  Polynomials.scala   line 4  Scala Problem
'=' expected but ']' found. Polynomials.scala   line 4  Scala Problem
illegal start of simple expression  Polynomials.scala   line 5  Scala Problem
4

1 に答える 1

6

Scala にはuse- sitevariance がないため+A、メソッドでは許可されず、クラスでのみ許可されます。とにかく、ここでは意味がありません。見逃すことはないと思います。Tまた、トレイトまたはメソッドのどこかに必要です。And::は traversable で定義されていませんが、aListは traversable であるため、1 つを使用できます。Traversable[T]そして、実際にはではなく を返していますTraversable[A]。そう:

trait Polynomials {
  def coefficients[T, A <: Traversable[T]](x: A): Traversable[T] = 
    x.foldLeft(List[T]())((b,a) => a :: b)
}

しかし、A <: Traversable[T]とにかくサブタイプ化によってそれが得られるため、実際には何も購入していません。とても短くて簡単なのは

trait Polynomials {
  def coefficients[T](x: Traversable[T]): Traversable[T] = 
    x.foldLeft(List[T]())((b,a) => a :: b)
}
于 2012-07-27T19:29:38.083 に答える