scalaプログラミング-特質スタック可能な変更に使用
特質の重要な使い方の一つは、痩せたインターフェースを太ったインターフェースに変えることです.
2つ目の主な使い方は、クラスにスタック可能な変更を提供することです.特質は、これらの変更をスタックすることで、クラスの方法を変更することができます.
栗を挙げます.
整数キューのスタック変更
キューには2つの操作があります.put、整数をキューに入れ、get、末尾から取り出します.
キューは先に出るので、getは整数でキューに入る順番に取り出すべきです.
クラスがこのようなキューを実装すると、次のような変更を実行する特質を定義できます.
Doubling:キューに入れたすべての数字を倍にする
Incrementing:対塁に入れたすべてのデジタル付加価値
Filtering:負の数をキューからフィルタ
この3つの特質は、新しいキュークラスを定義するのではなく、元のキューのクラスの動作を変更したため、変更を表します.この3つも同じように積み重ねられます
2つ目の主な使い方は、クラスにスタック可能な変更を提供することです.特質は、これらの変更をスタックすることで、クラスの方法を変更することができます.
栗を挙げます.
整数キューのスタック変更
キューには2つの操作があります.put、整数をキューに入れ、get、末尾から取り出します.
キューは先に出るので、getは整数でキューに入る順番に取り出すべきです.
クラスがこのようなキューを実装すると、次のような変更を実行する特質を定義できます.
Doubling:キューに入れたすべての数字を倍にする
Incrementing:対塁に入れたすべてのデジタル付加価値
Filtering:負の数をキューからフィルタ
この3つの特質は、新しいキュークラスを定義するのではなく、元のキューのクラスの動作を変更したため、変更を表します.この3つも同じように積み重ねられます
// IntQueue
abstract class IntQueue{
def get():Int
def put(x:Int)
}
// ArrayBuffer 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}
}
val queue = new BasicIntQueue
println(queue)
queue.put(10)
queue.put(20)
println(queue.get)
println(queue.get)
//Doubling IntQueue. IntQueue
trait Doubling extends IntQueue{
abstract override def put(x: Int) {super.put(2 * x)}
}
// super 。 ,
// 。 , 。 super
// , Doubling super , ,
//
//
// , , abstract override ,
class MyQueue extends BasicIntQueue with Doubling
val myqueue = new MyQueue
myqueue.put(30)
println(myqueue.get)