Scala Scala隱式轉換機制

2021-10-08 10:48:38 字數 2016 閱讀 2811

概述

scala implicit關鍵字詳解(隱式轉換函式、隱式類、隱式引數、隱式值),implicit是scala中的乙個關鍵字,關於它有著豐富的用法,使得scala更靈活和容易擴充套件。

implicit def int2str

(x:int)

:string = x.tostring

這段**宣告了乙個函式int2str,它與正常函式唯一的區別在於前面多出的implicit關鍵字。這裡的implicit就是它字面的含義——隱式,它告訴編譯器,這個函式是乙個隱式轉換函式,能夠把int型別的值轉換成string型別的值。

知識點

scala implicit關鍵字用於定義隱式方法、隱式類、隱式物件隱式轉換的作用:當乙個轉換不合法時,在當前的作用域能夠找到對應的隱式轉換,使得轉換合法定義隱式轉換方法時,方法名自定義,但引數列表只能有乙個

隱式轉換不能存在二義性,即在同一作用域中,只有存在一種型別轉換

通過隱式類,可以讓使用者靈活的自定義和擴充方法。注意:定義隱式類時,主構造器的引數只能有乙個

object demo10 

//> f1: (x: int)string

val v3:string=v1 //> v3 : string = 100

//二、隱式類

implicit class

authmethod

(x:string)

def prefix()

=}val s1=

"fil01.txt"

//> s1 : string = fil01.txt

//呼叫suffix方法,獲取檔名的字尾

s1.suffix //> res0: string = .txt

s1.prefix //> res1: string = fil01

//三、隱式物件

trait adder

[t]

def f2

(a:int,b:int)

(implicit adder:adder[int])=

//> f2: (a: int, b: int)(implicit adder: demo10.adder[int])intf2(

2,3)

(new

adder

[int]})

//> res2: int = 5

//隱式物件

implicit val a=

newadder

[int]

}//> a : demo10.adder[int] = demo10$$anonfun$main$1$$anon$2@7f63425af2(

2,3)

(a)//> res3: int = 5f2(

2,3)

//> res4: int = 5

}

object demo09 

//返回結果集

result

}//> values: (f: int => int, start: int, end: int)scala.collection.mutable.arrayb

//| uffer[(int, int)]

values

(x=>x*x,-5

,5)//> res0: scala.collection.mutable.arraybuffer[(int, int)] = arraybuffer((-5,25)

//| , (-4,16), (-3,9), (-2,4), (-1,1), (0,0), (1,1), (2,4), (3,9), (4,16), (5,25

//| ))

}

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

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

隱式轉換和隱式引數

1 隱式轉換 隱式轉換函式是以implicit關鍵字宣告的帶有單個引數的函式。這種函式將會自動應用,將值從一種型別轉換為另一種型別 object scala01 implicit def f1 d double int double 是輸入型別,int 是轉換後的型別 隱式函式的底層工作原理 def...

mysql 隱式轉換 mysql中的隱式轉換

在mysql查詢中,當查詢條件左右兩側型別不匹配的時候會發生隱式轉換,可能導致查詢無法使用索引。下面分析兩種隱式轉換的情況 看表結構 phone為 int型別,name為 varchar 兩種情況都可以用到索引,這次等號右側是 2 注意帶單引號喲,左側的索引欄位是int型別,因此也會發生隱式轉換,但...