使用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
在下面的**裡,我們定義了乙個樣例類,然後定義兩個排序方法sortby1
和sortby2
,從作用上講兩者是一樣的:將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...