12 5 作為可疊加修改的特質

2022-01-26 06:16:10 字數 936 閱讀 4252

定義乙個抽象的intqueue類

abstract class intqueue

intqueue的基本實現basicintqueue

class basicintqueue extends intqueue

特質doubling:將所有放入佇列的整數翻倍

①extends intqueue 這個宣告意味著這個特質只能被混入同樣繼承自intqueue的類。

②super 由於特質中的super呼叫是動態繫結的,只要在給出了該方法具體定義的特質或類之後混入,doubling特質裡的super呼叫就可以正常工作。

③abstract override 這樣的修飾符組合只允許用在特質的成員上,不允許用在類的成員上,它的含義是該特質必須混入某個擁有該方法具體定義的類中。

trait doubling extends intqueue

特質incrementing:將所有放入佇列的整數加一

trait incrementing extends intqueue

特質filtering:從佇列中去除負整數

trait filtering extends intqueue

測試1:粗略地講,越靠右出現的特質越先起作用,如果那個方法呼叫super,它將呼叫左側緊挨著它的那個特質的方法,以此類推。在下面的**中,先呼叫filtering的put最先被呼叫,所以它首先過濾掉了那些負的整數。incrementing的put排在第二,因此它做的事情就是在filtering的基礎上對剩下的整數加1

def main(args: array[string]): unit =

測試2:與測試1的特質混入順序相反

def main(args: array[string]): unit =

通俗地解釋scala中疊加特質的構建順序和執行順序

1 object mixindemo02 15 1617 trait operate4 2122 trait data4 extends operate4 27 2829 trait db4 extends data4 35 3637 trait file4 extends data4 43clas...

可修改的雜湊

如果在乙個字串中要找是否存在長度為n的回文串 可以manachar 但是更好打的方式是直接hash 可是,這個hash需要算o len 個長度為n的字串的hash值 如果暴力,已經到了o n 2 的級別 那麼考慮一下,如何簡化。計算hash的o n 是不能省的 那麼不難想到利用前面串的結果來巧算後面...

小心使用可修改的常量。

procedure tfdbform editform md.enabledatasetevent aenalbed boolean const cdetailbeforeeditevent tdatasetnotifyevent nil cdetailbeforedeleteevent tdata...