黑猴子的家 Scala 隱式解析機制

2021-09-27 11:03:35 字數 471 閱讀 4691

即編譯器是如何查詢到缺失資訊的,解析具有以下兩種規則:

1、首先會在當前**作用域下查詢隱式實體(隱式方法、隱式類、隱式物件)。

2、如果第一條規則查詢隱式實體失敗,會繼續在隱式引數的型別的作用域裡查詢。

型別的作用域是指與該型別相關聯的全部伴生模組,乙個隱式實體的型別t它的查詢範圍如下:

(1)如果t被定義為t with a with b with c,那麼a,b,c都是t的部分,在t的隱式解析過程中,它們的伴生物件都會被搜尋。

(2)如果t是引數化型別,那麼型別引數和與型別引數相關聯的部分都算作t的部分,比如list[string]的隱式搜尋會搜尋list的伴生物件和string的伴生物件。

(3)如果t是乙個單例型別p.t,即t是屬於某個p物件內,那麼這個p物件也會被搜尋。

(4)如果t是個型別注入s#t,那麼s和t都會被搜尋。

記不住也沒有關係,因為編譯器會檢查的,會報錯的,那這個機制有什麼用呢?

黑猴子的家 Scala 函式變種

1 變種1,乙個引數 第一種 乙個引數 def pla1 a1 string unit 2 變種2,兩個引數 第二種 兩個引數 def pla2 a1 string,a2 string unit pla2 a2 hei a1 haha 3 變種3,引數預設值 第三種 引數預設值 def pla3 a...

黑猴子的家 Scala 佇列 Queue

佇列資料訪問,符合先進先出策略 1 佇列的建立 import root scala.collection.mutable import scala.collection.mutable val q1 new mutable.queue int println q1 2 佇列元素的追加 q1 1 pr...

黑猴子的家 Scala 密封類

如果想讓case類的所有子類都必須在申明的該類的相同的檔案中定義,可以將樣例類的通用超類宣告為sealed,叫做密封類,密封就是外部使用者不能在其他檔案中定義子類。不能被繼承只能自己用 sealed abstract class trafficlightcolor case object red e...