Scala之隱式函式的使用(八)

2021-10-24 02:28:44 字數 1866 閱讀 4702

簡介

所謂隱式函式指的是那種以implicit關鍵字宣告的帶有單個引數的函式。正如它的名稱所表達的,這樣的函式將會自動應用,將值從一種型別轉換為另一種型別。

隱式函式的使用

需求分析:使用隱式函式解決資料型別的轉換問題

object implicitdemo01 

val num:

int=

3.9 println(num)

}}

這裡隱式函式的使用就是將double型別的3.9隱式的轉化為int型別,在當前的這個作用域中,它會預設的呼叫 doutoint 這個函式。

注意事項以及細節處理

隱式函式的函式名是可以任意的,隱式函式與函式名稱無關。

隱式函式在當前作用域中可以有多個,但是只有乙個隱式函式能夠被識別。

隱式轉換豐富類庫功能

1.首先可以定義乙個經過豐富的型別,提供你想要的功能

implicit

def adddelete(mysql: mysql)

: db =

class db

}

2.然後就可以在本身功能的基礎上實現上面的功能

class mysql 

}val mysql =

new mysql

mysql.insert(

)mysql.delete(

)//呼叫了隱式函式

隱式值,預設值,傳值的優先順序

當我們在乙個程式中同時出現隱式值,預設值,傳值的情況時它們是有優先順序進行區分的。

// 隱式值

implicit

val name:

string

="scala"

// 預設值

def hello(

implicit content:

string

="jack"):

unit=

hello(

"wc"

)// 傳值

隱式值,預設值,傳值同時存在的情況下輸出:hello wc

// 隱式值

implicit

val name:

string

="scala"

// 預設值

def hello(

implicit content:

string

="jack"):

unit=

hello

隱式值,預設值同時存在時輸出:hello scala

小結:

編譯器的優先順序為 傳值 > 隱式值 > 預設值

在隱式值匹配時,不能有二義性

如果 隱式值,預設值,傳值 乙個都沒有,就會報錯

隱式類的使用

**樣例

object implicitclassdemo 

}val mysql =

new mysql1

mysql.sayok(

) mysql.addsuffix()}

}class db1

class mysql1

}

注意事項

其所帶的構造引數有且只能有乙個

隱式類必須被定義在 「類」,「伴生物件」,「包物件」裡。

隱式類不能是樣例類

作用域內不能有與之相同名稱的識別符號

scala隱式轉換函式

定義 1.只要在程式可見的範圍內定義了隱式轉換函式,就會被scala自動呼叫 2.隱式轉換函式的名字可以任意,建議名為 2yyy 3.以implicit開頭,而且最好定義函式返回型別 eg object test else if obj.getclass classof older else nul...

scala隱式引數 隱式函式 隱式類詳解

隱式函式 隱式類1 定義乙個普通變數,使用 implicit 關鍵字修飾,定義乙個函式呼叫這個變數當引數時,此時這個引數就被稱為隱式引數 2 隱式引數的作用 減少提供函式引數的數量,讓某些引數擁有隱藏的值 隱式變數 def main args array string unit def fun2 a...

Scala之隱式轉換

隱式轉換函式是以implicit關鍵字宣告帶有單個引數的函式。這種函式將會自動應用 package top.mgy object implicitdome def main args array string unit 上面的將double轉為int的函式f1將會自動應用的作用域中所有需要將doub...