隱式函式相關

2021-09-02 23:32:50 字數 1462 閱讀 7621

隱式函式就是類似於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...