函式或者方法可以帶有乙個標記為implicit
的引數。在這種情況下,編譯器將會查詢預設值,提供給該函式或者方法。示例:
case
class
d(left:string,right:string)
def quote(title:string)(implicit d:d) =
d.left+title+d.right
可以用乙個顯示的d睇相來呼叫quote方法。這樣:
quote("hello")(d("<<",">>"))//這其實就是柯里化
也可以略去引數列表:
quote("hello")
在這種情況下,編譯器會查詢乙個型別為d的隱式值。這必須是乙個被宣告為implic的值。編譯器將在如下兩個地方查詢這樣的乙個物件:
當前作用域所有可以用單個識別符號指代的滿足型別要求的val和def
與所要求型別相關聯的型別的半生物件(相關聯型別包括所要求型別本身以及他的型別引數)
比如,我們可以做乙個物件:
object
a { implicit val m = d("<<",">>")
……}
這樣我們就可以從這個物件引入所有的值:
import a._
如此一來,兩個標點符號就可以隱式的提供給quote函式了
如下**是有兩個相同型別的隱式引數是行不通的,因為編譯器不知道怎麼對應
def quote(title:string)(implicit left:string, right:string)
但是,隱式引數有什麼作用呢?之後再去分析 Scala隱式轉換與隱式引數
所謂隱式轉換,是指以implicit關鍵字宣告的帶有單個引數的方法。它是自動被呼叫的,自動將某種型別轉換為另外一種型別。隱式轉換的使用步驟 在object中定義隱式轉換方法 使用implicit 在需要用到隱式轉換的地方,引入隱式轉換 使用import 自動呼叫隱式轉化後的方法 示例 使用隱式轉換,...
Scala 隱式轉換和隱式引數
紙上得來終覺淺,絕知此事要躬行!隱式函式基本介紹 隱式轉換函式是以implicit關鍵字宣告的帶有單個引數的函式。這種函式將會自動應用,將值從一種型別轉換為另一種型別 隱式函式快速入門 使用隱式函式可以優雅的解決資料型別轉換,案例入門.implicit def f1 d double int dou...
scala 隱式轉換函式 隱式轉換引數
目前的scala相關部落格大概只能算乙個筆記,方便自己記錄,也幫大家查詢資訊了。首先scala中的隱式轉換可以分為隱式函式轉換與隱式引數轉換兩類,下面就來分別說一下自己對這兩種模式的理解。1 隱式函式轉換,我們先看一段 scala val x int 3.14 10 error type misma...