2015-07-12 60 views
1

我目前正试图实施我自己的UnsignedInt。我想正确地实现它,以便它适合整个Scala类型的类系统。但是,我对所有符合Number的类感到困惑。如何在Scala中正确实现自定义数字类?

我需要使用哪类工作:NumericIntegralScalaNumber?或者完全不同的东西?我的班级应该实施哪些课程和/或特点?

回答

2

简短的回答是:不要实现你自己的,使用Spire一个:)否则,你应该实现Integral(其中包括Numeric)。请注意,您的类型不应该延伸它;你需要隐含值在同伴对象,即

class UnsignedInt { ... } 

object UnsignedInt { 
    implicit val UIntIntegral: Integral[UnsignedInt] = ... 
} 

你也应该考虑让你的类value class

+0

“积分”就够了吗?或者我还需要其他人吗?除了Spire,还有其他的实现吗? (谢谢你的链接!) – r0estir0bbe

+0

'Integral'会给你所有的标准号码操作和整数除法。你可能也需要'Ordering'。还有https://github.com/nystrom/scala-unsigned,但它不被维护。 –

相关问题