簡介
所謂隱式函式指的是那種以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...