1
我目前正試圖實施我自己的UnsignedInt
。我想正確地實現它,以便它適合整個Scala類型的類系統。但是,我對所有符合Number的類感到困惑。如何在Scala中正確實現自定義數字類?
我需要使用哪類工作:Numeric
,Integral
或ScalaNumber
?或者完全不同的東西?我的班級應該實施哪些課程和/或特點?
我目前正試圖實施我自己的UnsignedInt
。我想正確地實現它,以便它適合整個Scala類型的類系統。但是,我對所有符合Number的類感到困惑。如何在Scala中正確實現自定義數字類?
我需要使用哪類工作:Numeric
,Integral
或ScalaNumber
?或者完全不同的東西?我的班級應該實施哪些課程和/或特點?
簡短的回答是:不要實現你自己的,使用Spire一個:)否則,你應該實現Integral
(其中包括Numeric
)。請注意,您的類型不應該延伸它;你需要隱含值在同伴對象,即
class UnsignedInt { ... }
object UnsignedInt {
implicit val UIntIntegral: Integral[UnsignedInt] = ...
}
你也應該考慮讓你的類value class。
「積分」就夠了嗎?或者我還需要其他人嗎?除了Spire,還有其他的實現嗎? (謝謝你的鏈接!) – r0estir0bbe
'Integral'會給你所有的標準號碼操作和整數除法。你可能也需要'Ordering'。還有https://github.com/nystrom/scala-unsigned,但它不被維護。 –