scala
中的型別引數晦澀難懂,不過有幾個基本要點可以記錄 t
<:upperbound
上界,通俗理解t是
upperbound
的子類
t >: lowerbound
下界,通俗理解為t為
lowerbound
的超類
t <% comparable[t]
檢視界定,簡單理解為,
t可以通過隱式轉換為後者
t : ordering
上下文界定,必須存在乙個型別為
ordering[t]
的隱式值,這裡還沒有過多使用,不明其使用場景 型變
+t 協變,
student extends person ,
那麼接收
pair[person]
的地方並不能接收
pair[student],
這裡就需要將
pair
定義為協變的,才能接收
-t 逆變 這東西目前還不懂
scala
可以允許程式設計師自己定義隱式轉換,比如:
implicit def int2fraction(n : int) =fraction(n,1)
定義了上面的轉換之後,當程式遇到下面的**:
valresult = 3* fraction(4,5)
正常情況下上面**是不能通過編譯的,因為整數
3是不能與乙個物件相乘的,這裡因為有上面的隱式轉換的定義在,所以
3會被轉換為函式呼叫
int2fraction(3)。
隱式轉換在
scala
中使用比較多,編譯器轉換規則如下: 1
、如果不進行任何隱式轉換就可以編譯通過的情況下,編譯器不會做任何轉換,如果確實需要需要自己顯示轉換 2
、如果可以同時執行多個轉換的情況下,即有二義性,編譯器會報錯拒絕轉換 3
、編譯器不會進行深層棧轉換(需要通過多次轉換)
Scala學習筆記 型別引數化陣列
scala看得頭痛,記一下筆記。valgreetstrings newarray string 3 greetstrings 0 hello greetstrings 1 greetstrings 2 world n for i 0to2 print greetstrings i 說明 1 scal...
Scala 型別引數
型別引數是什麼?型別引數其實就類似於j a中的泛型。先說說 j a 中的泛型是什麼,比如我們有 list a new arraylist 接著a.add 1 沒問題,a.add 2 然後我們 a.get 1 2 對不對?肯定不對了,a.get 1 獲取的其實是個 string 2 string 2 ...
Scala 型別引數
型別引數是什麼?型別引數其實就類似於j a中的泛型。先說說 j a 中的泛型是什麼,比如我們有 list a new arraylist 接著a.add 1 沒問題,a.add 2 然後我們 a.get 1 2 對不對?肯定不對了,a.get 1 獲取的其實是個 string 2 string 2 ...