我一直在阅读 Programming Scala 书(Martin Odersky、Lex Spoon、Bill Venners ed1)并遇到了一些特征。我觉得有趣的部分是可堆叠的修改。使用的例子是
abstract class IntQueue {
def get(): Int
def put(x: Int)
}
trait Incrementing extends IntQueue {
abstract override def put(x: Int) {super.put(x+1)}
}
trait Filtering extends IntQueue{
abstract override def put(x: Int){
if(x >=0) super.put(x)
}
}
所以提供的示例有一个具体的类“BasicIntQueue,它扩展了 IntQueue,如下所示
import scala.collection.mutable.ArrayBuffer
class BasicIntQueue extends IntQueue{
private val buf = new ArrayBuffer[Int]
def get() = buf.remove(0)
def put(x: Int) {buf +=x}
}
scala> val queue = (new BasicIntQueue with Incrementing with Filtering)
scala> queue.put(-1);queue.put(0);queue.put(1)
scala> queue.get() = 1
因此,该示例显示过滤和递增都是“链接”的,并在元素“放入”队列之前执行。
我只是想知道如何在 Groovy 中实现这一点。由于 Groovy 的元可编程性,可能不需要它。