【发布时间】:2014-05-29 19:54:16
【问题描述】:
我希望有一个层次结构,其中基类可以在其构造函数中使用一个函数,而派生类可以提供一个方法作为该函数。下面有一种方法可以做到这一点,但它很难看。我必须在超级构造函数的构造函数 arg 列表中声明子函数。这意味着该函数是匿名的,因此不是 Child 类的方法(尽管我认为我不在乎)。真正的代码会很长,最终会难以阅读,尤其是如果我有多个这些函数。
因此:
class A[T](s1: String, s2: String, w: (String, String) => Unit){
def go: Unit = {
w(s1, s2)
}
}
val externalWriter = { (s1: String, s2: String) =>
println (s1+s2)
}
val w1 = new A[String]("Hello ", "world", externalWriter)
w1.go
case class B(s1: String, s2: String) extends A[String](s1, s2, w = { (a: String, b: String) =>
println ("Class B:"+a+b)
}){
def write: Unit = go
}
val w2 = B("Hey ","guys")
w2.write
w1.go 打印“Hello world”,w2.write 打印“B 类:大家好”。所以这就是我想要的,但是有没有办法让w 成为 B 类的方法或 val,并且仍然将它传递给超级的构造函数?
【问题讨论】:
标签: scala constructor functional-programming