如何在Scala中编写具有依赖类型的方法

时间:2019-02-26 06:07:45

标签: scala

我试图了解Scala中的辅助模式。

trait Lst extends Any {
  type Item
  def get(index: Int): Item
}

object Lst {
  type Aux[I] = Lst {type Item = I}
}

我还有一些类将Item覆盖为IntegerString或其他:

final case class IntLst(size: Int) extends AnyVal with Lst {type Item = Int}
final case class StrLst(size: Int) extends AnyVal with Lst {type Item = Char}

我想写一种可以从IntLstStrLst实例创建列表的方法。我这样写:

def makeList(l: Lst): List[l.Item] = (0 until l.size map l.get).toList

但是它不能编译:{{1​​}}

那么Expected class or object definition的定义应该看起来如何?

完整代码:

makeList

1 个答案:

答案 0 :(得分:4)

问题出在get上。尝试以下方法:

def makeList(l: Lst): List[l.Item] = (0 until l.size).map(l.get(_)).toList