Scala中的隱式轉換函式 隱式引數和隱式類

2021-09-26 07:45:43 字數 1885 閱讀 8878

隱式轉換函式: 所謂隱式轉換函式指的是implicit關鍵字修飾的且只有乙個引數的函式,其作用是 1.隱式轉換增強現有型別,2. 隱式轉換做引數型別轉換​​​​​​​

1. 例如:

inplicit def int2string(n:int):string = (n.tostring)
上案例:我們把fruit物件轉換成了monkey物件

//scala的隱式轉換

//水果

class fruit(name:string)

}//猴子monkey

class monkey(f:fruit)

}object implicitdemo

def main(args: array[string])

}

2. 隱式轉換做引數型別轉換

// 案例:特殊售票視窗(只接受特殊人群,比如學生、老人等)

class specialperson(val name : string)

class student(val name : string)

class older(val name : string)

//隱式轉換函式,將student和older轉變成specialperson型別

implicit def object2specialperson(obj : object) : specialperson =

case b : older =>

case _ => nil

}}

def buyspecialticket(sp : specialperson)

buyspecialticket(new student("student"))

執行結果:

隱式引數:使用implicit申明的函式引數叫做隱式引數。我們也可以使用隱式引數實現隱式的轉換

//scala的隱式引數

def testparam(implicit name:string) =

//定義乙個隱式引數

implicit val name:string="這是乙個隱式值"

//問題:在呼叫的方法的時候,可以不用傳遞引數嗎?

testparam

//使用隱式引數實現隱式的轉換

//定義乙個方法,找到兩個值中較小的那個值

// 100 23 ---> 23

// hello abc ---> abc

def smaller[t](a:t,b:t)(implicit order:t => ordered[t]) = if(a < b) a else b

smaller(100,23)

smaller("hello","abc")

所謂隱式類: 就是對類增加implicit 限定的類,其作用主要是對類的功能加強!

/**

* scala的隱式類

*/object implicitclass

def main(args: array[string])

/*隱式類執行的過程:

1. 當1.add(2),scala的編譯器不會立即報錯;在當前域當中查詢,有沒有implicit修飾的,同時可以將int作為引數的構造器,

並且具有add方法的類。通過查詢,找到了calc

2. 利用隱式類calc來執行add方法

*/}

scala 隱式轉換函式 隱式轉換引數

目前的scala相關部落格大概只能算乙個筆記,方便自己記錄,也幫大家查詢資訊了。首先scala中的隱式轉換可以分為隱式函式轉換與隱式引數轉換兩類,下面就來分別說一下自己對這兩種模式的理解。1 隱式函式轉換,我們先看一段 scala val x int 3.14 10 error type misma...

scala隱式轉換函式

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

scala隱式轉換函式及隱式值

隱式函式基本介紹 隱式轉換函式是以implicit關鍵字宣告的帶有單個引數的函式,這種函式將會自動呼叫,將值從一種類 型轉換到另一種型別,使用隱式函式可以優雅的解決資料型別轉換 隱式轉換的注意事項和細節 1 隱式轉換函式的函式名可以是任意的,隱式轉換與函式名稱無關,只與函式 簽名 函式引數型別和 返...