抽象结构类型的实现

时间:2018-10-25 11:40:14

标签: scala generics

我试图理解抽象的结构类型。假设我有一个特征

trait Test {

  type Foo = String => Unit

  def printFoo(s : Foo) = {
    println(s)
  }
}

和一个简单的功能

val foo : String => Unit = (s : String) => println(s)

如何在课堂上实现此功能?当我尝试

  val s = new Test {
    override type Foo = String => Unit
  }

并尝试实施

s.printFoo(foo("Test"))

它不起作用。

1 个答案:

答案 0 :(得分:1)

由于方法printFoo获得了lambda,因此您正在打印函数对象。 解决问题的一种方法是提供多个参数列表:

trait Test {

  type Foo = String => Unit

  def printFoo(f: Foo)(s: String) = {
    f(s)
  }
}

val foo : String => Unit = (s : String) => println(s)

val s = new Test {
  override type Foo = String => Unit
}

s.printFoo(foo)("something")

// or reuse it:
val doFoo: String => Unit = s.printFoo(foo)
doFoo("something A...")
doFoo("something B...")