Scala隱式轉換

2021-09-24 04:08:10 字數 1188 閱讀 6527

隱式轉換函式:

object listdemo

}

上面的**能夠正常的執行,並且會輸出2. 原因是以為多了乙個用implicit修飾的函式,叫做隱式函式。他與正常函式的區別是前面加了乙個implicit,他的意義在與如果編譯器在編譯的時候找不到你所用的型別,那麼隱式轉換函式會自動將資料轉換成你所期望的型別。所以上面的10呼叫length不合法,但是會自動在當前作用域中尋找隱式函式使其合法。

隱式轉換函式的發生在下面的情形:

e是乙個s型別的表示式,而需要的卻是t型別,編譯器會尋找s=>t的隱式轉換

e是乙個s型別的表示式,使用點號訪問e.m時,m不是型別s的成員,編譯器會尋找合適的隱式轉換使e.m合法

再比如:

class listdemo(value:int) 

}object listdemo

}

編譯器會根據隱式轉換函式把2轉換成listdemo物件,然後呼叫sayint方法進行相加

隱式轉換函式目的是由一種引數轉為另一種引數,所以隱式轉換函式的只能有乙個引數

隱式類: 類的前面加implicit,隱式類用來增加類的功能

上面第二個例子中我們可以直接用隱式類來進行轉換,看起來更簡單,比如:

object listdemo

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

}

隱式類的定義也是有限制的,比如說建構函式中必須攜帶乙個引數,只能在別的trait/類/物件內部定義等。

隱式引數:

方法可以具有 隱式 引數列表,由引數列表開頭的 implicit 關鍵字標記。 如果引數列表中的引數沒有像往常一樣傳遞, scala 將檢視它是否可以獲得正確型別的隱式值,如果可以,則自動傳遞。

比如說:

class listdemo 

}object listdemo

}

上面的sayint沒有傳遞任何值也不會報錯,是因為它自動找到了value:int = 10,並將其專遞 了過去。

隱式轉換雖然靈活,但是無疑加大了**的可讀性。

只是學了學 還需多多聯絡

scala 隱式轉換

defdisplay input string unit println input implicit deftypeconvertor input int string input.tostring implicit deftypeconvertor input boolean string if...

scala 隱式轉換

隱式轉換就是 當scala編譯器進行型別匹配時,如果找不到合適的候選,那麼隱式轉化提供了另外一種途徑來告訴編譯器如何將當前的型別轉換成預期型別。使用方式 將方法或變數標記為implicit 將方法的引數列表標記為implicit 將類標記為implicit 宣告乙個帶有implicit修飾過引數的方...

scala隱式轉換

目錄 隱式轉換的概念 隱式轉換的使用 隱式轉換做引數型別轉換 隱式轉換增強現有型別 隱式引數 利用隱式引數進行隱式轉換 再議context bounds 隱式轉換函式 implicit conversion function 是以implicit關鍵字宣告的帶有單個引數的函式,這樣的函式將被自動應用...