scala學習筆記(十六) 型別引數與隱式轉換

2021-09-30 12:41:42 字數 999 閱讀 7214

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 ...