0
以下的可堆疊的特點[1]典型的例子:如何堆疊模式,在Scala中,應用時,你需要更多的參數
trait Double extends IntQueue {
abstract override def put(x: Int) { super.put(2 * x) }
}
,如果我想要不斷的「2」被dymically設置?
我有兩個解決方案,但有相當大的缺點:
Add方法
putMultiplied
新特點MultiplyX
trait Multiplier extends IntQueue { abstract override def putMultiplied(constant: Int, x: Int) { super.put(constant * x) } }
然而,這破壞了可堆疊屬性,因爲另一個可堆疊特性必須知道
putMultiplied
方法給常量設置一個setter:
trait Multiplier extends IntQueue { var constant //hihi a variable constant abstract override def put(x: Int) { super.put(constant * x) } }
但是,這看起來很奇怪,並且讓調用者在每次調用之前記得設置
constant
。
憑直覺我希望性狀有一個構造函數的參數:
trait Multiplier(val constant: Int) extends IntQueue {
abstract override def put(x: Int) { super.put(constant * x) }
}
但很可惜,我們都知道性狀不支持的參數。
我是否過多地要求將這種模式與Scala特性結合使用? 這將如何解決?
[1] http://www.artima.com/scalazine/articles/stackable_trait_pattern.html