我编写了以下代码,这实际上是scala中的一个愚蠢的合并排序实现:
import scala.collection.immutable.List
object MergeSort {
def sort[T,E]( comparator: (E,E) => Int ) (l: List[T]): List[T] = {
def merge[T](first: List[T], second: List[T]): List[T] = (first, second) match {
case (_, List()) => first
case (List(), _) => second
case (f::restFirst, s::restSecond) if comparator(f.asInstanceOf[E],s.asInstanceOf[E]) < 0 => f :: merge(restFirst, second)
case (f::restFirst, s::restSecond) => s :: merge(first, restSecond)
}
l match {
case List() => return l
case List(x) => return l
case _ => {
val (first, second) …Run Code Online (Sandbox Code Playgroud) 我有一个简单的容器特征,如下所示:
trait Handler {
def apply[In, Out](in: In): Out
}
Run Code Online (Sandbox Code Playgroud)
当我尝试实现它时:
new Handler {
def apply[Any, Unit](in: Any) = println(in)
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
[error] found : scala.Unit
[error] required: Unit(in method apply)
[error] def apply[Any, Unit](in: Any) = println(in)
Run Code Online (Sandbox Code Playgroud)
为什么是这样?我可以修复此编译器错误吗?
大家好我对来自C#的Scala相当新.
我正在尝试编写自己的累积版本(折叠)我想知道为什么我遇到以下问题:
def accumulate[T](list : List[T], initial: T, f: (T, T) => T) : T = {
@tailrec def loop[T](list: List[T], accum: T) : T =
if(list.length == 0)
accum
else{
val head : T = list.head
val res : T = f(accum,head)
loop[T](list.tail, res)
}
loop(list,initial)
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
type mismatch;
found : accum.type (with underlying type T)
required: T
val res : T = f(accum,head)
^
Run Code Online (Sandbox Code Playgroud)
考虑到一切都是T型,我无法看到我的类型不匹配.
任何想法/帮助将不胜感激.
布莱尔