我试图理解抽象的结构类型。假设我有一个特征
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"))
它不起作用。
答案 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...")