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,但它不被维护。 –