Scala 隱式轉換

2021-09-29 03:52:16 字數 850 閱讀 2019

我理解的隱式轉換是一種能像裝飾器設計模式一樣,對原有功能進行增強的語法。

當原有函式不具備某些我們想要的功能時,我們或許可以通過隱式轉換來解決這樣的問題。

比如我們想得到一杯果汁,卻只有乙個蘋果的時候

scala中的隱式轉換是一種非常強大的**查詢機制。當函式、構造器呼叫缺少引數或者某一例項呼叫了其他型別的方法導致編譯不通過時,編譯器會嘗試搜尋一些特定的區域,嘗試使編譯通過。

標記規則:只有標記為implicit的變數,函式或物件定義才能被編譯器當做隱式操作目標。

作用域規則:插入的隱式轉換必須是單一標示符的形式處於作用域中,或與源/目標型別關聯在一起。單一標示符是說當隱式轉換作用時應該是這樣的形式:file2array(arg).map(fn)的形式,而不是foo.file2array(arg).map的形式。假設file2array函式定義在foo物件中,我們應該通過import foo._或者import foo.file2array把隱式轉換匯入。簡單來說,隱式**應該可以被"直接"使用,不能再依賴類路徑。

假如我們把隱式轉換定義在源型別或者目標型別的伴生物件內,則我們可以跳過單一標示符的規則。因為編譯器在編譯期間會自動搜尋源型別和目標型別的伴生物件,以嘗試找到合適的隱式轉換。

無歧義規則:不能存在多於乙個隱式轉換使某段**編譯通過。因為這種情況下會產生迷惑,編譯器不能確定到底使用哪個隱式轉換。

單一呼叫規則:不會疊加(重複巢狀)使用隱式轉換。一次隱式轉化呼叫成功之後,編譯器不會再去尋找其他的隱式轉換。

顯示操作優先規則:當前**型別檢查沒有問題,編譯器不會嘗試查詢隱式轉換。

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關鍵字宣告的帶有單個引數的函式,這樣的函式將被自動應用...