implicit 可分為三種隱式引數 隱式轉換型別 隱式呼叫函式
1、隱式引數
implicit引數都是定義在方法最後,修飾implicit表示該組引數是隱式引數。乙個方法只會有乙個隱式引數列表,置於方法的最後乙個引數列表。如果方法有多個隱式引數,只需乙個implicit修飾即可
//使用隱式引數的方式 需要在外部定義乙個comparator[a]型別的變數
def maxthrid[a](first: a, second: a)(implicit cp: comparator[a]) =
//使用implicitly方法
//implicitly是在predef.scala裡定義的,它是乙個特殊的方法,編譯器會記錄當前上下文裡的隱式值,而這個方法則可以獲得某種型別的隱式值
def maxone[a: comparator](first: a, second: a) =
//在內部定義函式並宣告隱式引數,這種做法只是把外部方法的隱式引數隱藏了,放到內部巢狀函式上
def maxtwo[a: comparator](first: a, second: a) =
def main(args: array[string])
println(maxone(2, 3))
println(maxtwo(4, 1))
}
2、隱式轉換型別
把變數轉換成我們預期想要的型別
//隱式地轉換型別
implicit def doubletoint(a:double):int = a.toint
//這裡3.5就會轉換成int型別,如果沒有上面的隱式轉換就會編譯出錯
val i:int = 3.5
println(i)
3、隱式呼叫函式
就是我們使用的物件可能不存在某個方法,但是另外乙個物件存在,那麼我們隱式的轉換成那個存在某個方法的物件,來進行操作
class *****
class dog
object implicit*****
//隱式呼叫函式 dog並沒有say函式,但是通過dogto*****隱式方法轉換成*****例項就存在say方法
//編譯器通過隱式轉換將物件轉換成具有這個方法的物件
val d = new dog
import com.aralbox.scala.study42.implicit*****._
d.say
4、下面是更複雜的例子
package com.aralbox.scala.study42
object implicittype
}trait show[t]
object show
//隱式轉換show[string]
implicit def strshow: show[string] = new show[string]
def shoutystringshow: show[string] = new show[string]
}case class person(name: string, age: int)
object person
}
Scala學習筆記
scala學習筆記 一.scala中集合的常用方法 首先定義兩個陣列集合,用於測試 scala val arr1 array 1,2,3,4 arr1 array int array 1,2,3,4 scala val arr2 array 3,4,5,6 arr2 array int array ...
Scala學習筆記
1 閉包 var a 3 var addfun x int x a var b addfun 10 println b addfun 就是個和物件無關的函式,區域性變數,使用方法和函式一樣,但是好像不推薦這種寫法。2 類的建立,簡單使用abstract class bparent 構造函式引數會自動...
Scala 學習筆記
object a val u fab 15,list 1,1 val f p int print p t 變長引數 def sum nums int int int def main args array string unit def f p int int print f 4 object ab...