Scala 中 AOP 风格的 Mixin 组合
AOP-style Mixin Composition in Scala
我正在尝试使用 mixins 来获得 AOP/interceptor-like 编程风格。
这是我的代码:
trait X {
def run
}
trait Y extends X {
abstract override def run = {
println("hi")
super.run
}
}
object Z extends X with Y {
def run = println("bye")
}
我在尝试编译时遇到以下错误:
method run needs `override' modifier
我在这里做错了什么?我试图添加 'override' 修饰符,但它给了我:
method run needs `abstract override' modifiers
一种方法是在 class A
扩展基础 X
中定义基础功能,并提供一个对象(或 class) 混合了 A
和 Y
(以及您可以定义的所有其他特征):
trait X {
def run
}
trait Y extends X {
abstract override def run = {
println("hi")
super.run
}
}
class A extends X {
def run = println("bye")
}
object Z extends A with Y
Z.run
将打印
hi
bye
您应该创建基础摘要 class:
abstract class A {
def run
}
然后用X或Y扩展它:
trait X extends A /* OR trait Y extends A */ {
def run
}
trait Y /*extends A*/ extends X {
abstract override def run = {
println("hi")
super.run
}
}
然后将Z.run
移动到super class:
class S extends A {
def run = println("bye")
}
object Z extends S with X with Y {
//override def run = println("bye")
}
Z.run
// hi
// bye
我正在尝试使用 mixins 来获得 AOP/interceptor-like 编程风格。
这是我的代码:
trait X {
def run
}
trait Y extends X {
abstract override def run = {
println("hi")
super.run
}
}
object Z extends X with Y {
def run = println("bye")
}
我在尝试编译时遇到以下错误:
method run needs `override' modifier
我在这里做错了什么?我试图添加 'override' 修饰符,但它给了我:
method run needs `abstract override' modifiers
一种方法是在 class A
扩展基础 X
中定义基础功能,并提供一个对象(或 class) 混合了 A
和 Y
(以及您可以定义的所有其他特征):
trait X {
def run
}
trait Y extends X {
abstract override def run = {
println("hi")
super.run
}
}
class A extends X {
def run = println("bye")
}
object Z extends A with Y
Z.run
将打印
hi
bye
您应该创建基础摘要 class:
abstract class A {
def run
}
然后用X或Y扩展它:
trait X extends A /* OR trait Y extends A */ {
def run
}
trait Y /*extends A*/ extends X {
abstract override def run = {
println("hi")
super.run
}
}
然后将Z.run
移动到super class:
class S extends A {
def run = println("bye")
}
object Z extends S with X with Y {
//override def run = println("bye")
}
Z.run
// hi
// bye