2017-01-11 42 views
0

是否有可能創建自己的數字類型,可以與內置的scala數字類型進行比較,並可能用於混合算法? 例如,假設自定義類型和scala內置數字之間的混合算術 - 有可能嗎?

class UnsignedInt(private val bits :Int) extends AnyVal { 
    ... 
} 

我可以使其等於Int S' 雖然我可以定義def ==(that :Int)(我想這應該是不可能的),我找不到反正強制轉換,使得

val (s, u) = 1 -> new UnsignedInt(1) 
s == u 

調用我的自定義比較,而不是編譯器之前放棄後產生真實即使它運行。我一般都知道混合算術的懸念,但是由於這種比較不會產生編譯錯誤,並且通常會直觀地編寫,所以我希望至少能夠將兩個操作數提升爲可以安全注入的類型in。

回答

0

在Scala中執行此操作的典型方法是使用隱式轉換; this blog post解釋得很好。移植這個想法給你的類將是:

object UnsignedIntImplicits { 
    implicit def Int2UnsignedInt(value:Int) = new UnsignedInt(value) 
} 

請確保使用激活它:

import UnsignedIntImplicits._ 
相關問題