我可以做一个(傻)drop
包装,它接受一些Traversable
类型,并返回相同Traversable
类型,使用下面的代码:与斯卡拉
import scala.collection.TraversableLike
def dropN[E, T <: Traversable[E]]
(xs: T with TraversableLike[E, T], n: Int): T =
{
xs.drop(n)
}
dropN(0 to 3, 1) // returns: Range 1 to 3
但是,如果我尽量让类似的功能与递归:
// basically finds the tail
def dropNR[E, T <: Traversable[E]]
(xs: T with TraversableLike[E, T]): T =
{
if (xs.size > 1) dropNR[E,T](xs.drop(1)) else xs
}
我得到以下信息:Type mismatch: expected T with TraversableLike[E, T], actual: T
。
同时纯直通递归方法没有编译错误(但显然会永远递归)
def recurse[E, T <: Traversable[E]]
(xs: T with TraversableLike[E, T]): T =
{
recurse[E,T](xs)
}
为什么我会得到一个Type mismatch
当我使用降?
这是'Tratrable [E]'的返回类型,有什么办法让返回类型与输入类型相同?所以如果我给它一个'Seq [Int]'我想要一个'Seq [Int]'作为回报。 –
也许^^应该是它自己的问题,但这就是我的目标 –
你可以用'CanBuildFrom'构建器来实现。 –