相关疑难解决方法(0)

Scala中的泛型类型推断

我编写了以下代码,这实际上是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)

generics scala type-inference

9
推荐指数
1
解决办法
1277
查看次数

找到了scala.Unit,需要单位

我有一个简单的容器特征,如下所示:

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)

为什么是这样?我可以修复此编译器错误吗?

types scala

2
推荐指数
1
解决办法
252
查看次数

Scala中的通用编程

大家好我对来自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型,我无法看到我的类型不匹配.

任何想法/帮助将不胜感激.

布莱尔

generics scala generic-programming

1
推荐指数
1
解决办法
695
查看次数