scala隱式詳解

2021-09-27 12:18:10 字數 1013 閱讀 7084

使用implicit關鍵字

implicit val rate: float = 0.05f

implicit def float2int(float: float) =

呼叫方法時,如果未輸入隱式引數且**所處作用域中存在型別相容的隱式值,該值會從作用域中調出並被使用,反之,系統將會丟擲編譯器錯誤。

def calctax(amount: float)(implicit rate: float): float = amount * rate

呼叫該方法時,系統會將**所在區域性作用域中的某一隱式值傳入此方法:

implicit val currenttaxrate = 0.08f

...val tax = calctax(50000f) // 4000.0

在下面的**裡,我們定義了乙個樣例類,然後定義兩個排序方法sortby1sortby2,從作用上講兩者是一樣的:將list中的a物件對映成b物件,然後對按ordering[b]規則對list排序。

import math.ordering

case class mylist[a](list: list[a])

sortby2是對sortby1的簡寫。在sortby1中要傳入乙個隱式引數,然後在方法體內要呼叫。然後sortby2中省略了引數的傳入,但是要對b型別進行約束。因為不是所有的b型別可以生成ordering[b]。然後由於沒有顯示的引數定義,所以不能在呼叫的時候向sortby1一樣傳乙個ord引數。但是可以用implicitly關鍵字來搜尋和轉換乙個。

scala> implicitly[ordering[string]]

res5: ordering[string] = scala.math.ordering$string$@7ba93755

scala 隱式轉換詳解

隱式轉換的引出,先看一段 隱式轉換的引出 val num int 3.5 double 無法轉成 int 高精度 無法自動轉為 低精度 println s num 概念隱式轉換 以 implicit 關鍵字宣告的,帶有單個引數的函式,這種函式 將會自動應用,將值從一種型別轉為另一種型別 用隱式轉換的...

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

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

scala 隱式轉換

defdisplay input string unit println input implicit deftypeconvertor input int string input.tostring implicit deftypeconvertor input boolean string if...