目前的scala相關部落格大概只能算乙個筆記,方便自己記錄,也幫大家查詢資訊了。
首先scala中的隱式轉換可以分為隱式函式轉換與隱式引數轉換兩類,下面就來分別說一下自己對這兩種模式的理解。
1、隱式函式轉換,我們先看一段**:
scala> val x: int = 3.14
:10: error: type mismatch;
found : double(3.14)
required: int
val x: int = 3.14
^
在這裡,我們並不能給乙個int型別的變數賦乙個double型別的值,scala不支援預設的轉換。如果我們想要將這個double的值轉換成int的話,那麼隱式函式轉換便能完成這個任務了,我們首先定義乙個隱式轉換函式:
implicit def double2int(x: double): int = x.toint // implicit關鍵字用來宣告隱式轉換
這樣一來,我們上面的程式便能成功執行了,如圖:
當然,我們還能對這個隱式轉換函式進行更多的修改,比如實現floor,ceil等功能
2、隱式引數轉換,同樣看一段**:
def total(a: int, b: int) = a + b
val t = total(3, 0) // 3
在這裡,我們的total有兩個引數,在呼叫的時候需要傳入兩個引數才行。但是,有時候我們只需要乙個引數就夠了,另外乙個引數使用乙個定義好的值,那麼,我們可以為total定義乙個隱式引數:
implicit val x: int = 0 // implicit關鍵字用來宣告隱式轉換
def total(a: int)(implicit b: int) = a + b // 柯里化
total(3)(0) // 3
total(3) // 3
此時,我們為函式total定義了乙個隱式引數b,同樣時使用implicit關鍵字進行隱式轉換的宣告。
通過上述**,我們看到total(3)(0)與total(3)是相同的,這便是我們的隱式引數轉換了,隱式引數轉換使我們多了選擇,你可以在需要的時候再傳入值,此時隱式引數便不會自動傳入函式中了。
3、總結:
隱式函式轉換主要用於方法中引數與實際型別不匹配的情況,另外,當你呼叫類中不存在的方法時,也會嘗試隱式轉換。
隱式引數轉換則用於可選引數的情況,不想傳遞引數時,便使用定義的隱式值。
scala隱式轉換函式
定義 1.只要在程式可見的範圍內定義了隱式轉換函式,就會被scala自動呼叫 2.隱式轉換函式的名字可以任意,建議名為 2yyy 3.以implicit開頭,而且最好定義函式返回型別 eg object test else if obj.getclass classof older else nul...
scala 隱式轉換
defdisplay input string unit println input implicit deftypeconvertor input int string input.tostring implicit deftypeconvertor input boolean string if...
scala 隱式轉換
隱式轉換就是 當scala編譯器進行型別匹配時,如果找不到合適的候選,那麼隱式轉化提供了另外一種途徑來告訴編譯器如何將當前的型別轉換成預期型別。使用方式 將方法或變數標記為implicit 將方法的引數列表標記為implicit 將類標記為implicit 宣告乙個帶有implicit修飾過引數的方...