隱式函式就是類似於scala在背地裡默默幫我們處理一些既定的方法。
隱式轉換函式值得是那種以implicit關鍵字宣告的帶有單個引數的函式。正如他的名稱所表達的,這樣的函式將被自動應用,將值從一種型別轉換為另一種型別。
//定義了乙個隱式函式 預設將double轉換為int
scala> implicit def double2int(x:double)=x.toint
scala> val x:int=3.5
x:int=3
package menthodtool
} import menthodtool.implicitcover._
val x:int=3.5
println(x)
}
當表示式的型別與實預期的型別不一致時。
scala> val x:int=3.5 //這個會報錯,因為期望的值為int,輸入卻為double
//所以為了解決這個問題引入隱式轉換,再次執行x:int=3.5就不會報錯了
scala> implicit def double2int(x:double)=x.toint
scala>val x:int=3.5
x:int=3
當呼叫類中不存在的成員和呼叫某個方法時,該方法的引數宣告與傳入引數不匹配時,會自動將物件進行隱式轉換。
如果**能夠在不使用隱式轉換的前提下通過編譯,則不會使用隱式轉換。 例如 ab 能夠編譯的還,那麼編譯器不會嘗試aconvert(b)
編譯器不會嘗試同時執行多個轉換,例如 convert1(convert2(a))*b
存在二義性的轉換時錯誤的。例如a*convert(b)和convert(a)*b都是合法的話,編譯器將會報錯。
函式或方法可以帶有乙個標記為implicit的關鍵字。在這種情況下,編譯器將會去查詢相關類或是引入包中的預設值,提供給函式或方法。
//未加隱式引數**********===
class outputformat(var first:string,val second:string)
class student(var name:string)
}object implicitparamters
}
//增加隱式引數的話,能夠增加預設的格式
class outputformat1( var first:string,val second:string)
class student1(var name:string)
}object implicitparamters2
}
注意:定義的隱式值要唯一,不能再同乙個域中存在多個隱式值,這樣會造成編譯器找到多個隱式值,導致呼叫報錯。
參考連線
scala隱式引數 隱式函式 隱式類詳解
隱式函式 隱式類1 定義乙個普通變數,使用 implicit 關鍵字修飾,定義乙個函式呼叫這個變數當引數時,此時這個引數就被稱為隱式引數 2 隱式引數的作用 減少提供函式引數的數量,讓某些引數擁有隱藏的值 隱式變數 def main args array string unit def fun2 a...
隱式轉換中隱式引數與隱式函式的使用
隱式引數的使用 要定義多個隱式引數時,需要使用柯里化函式。隱式轉換作用就是 當呼叫方法時,不必手動傳入方法中的隱式引數,scala會自動在作用域範圍內尋找隱式值自動傳入。1 同型別的引數的隱式值只能在作用域內出現一次,同乙個作用域內不能定義多個型別一樣的隱式值。2 implicit 關鍵字必須放在隱...
Scala中的隱式轉換函式 隱式引數和隱式類
隱式轉換函式 所謂隱式轉換函式指的是implicit關鍵字修飾的且只有乙個引數的函式,其作用是 1.隱式轉換增強現有型別,2.隱式轉換做引數型別轉換 1.例如 inplicit def int2string n int string n.tostring 上案例 我們把fruit物件轉換成了monk...