[英]How would one implement OCaml / F#'s “function” construct in Scala?
[英]Is it possible to implement F#'s infrastructure for Units of Measurement in Scala?
F#附带了对测量单位系统的特殊支持,该系统提供静态类型安全性,同时编译为数字类型,而不是通过包装/展开操作增加运行时的负担。
是否有可能使用一些Scala的类型系统魔法来实现与之相当的东西?
我对此一无所知,但我在Scala Days的这次演讲中偶然发现: https : //wiki.scala-lang.org/display/SW/ScalaDays+2011+Resources#ScalaDays2011Resources-ScalaUImplementingaScalalibraryforUnitsofMeasure
的种类。 您可以使用指数元组中的整数类型表示来非常轻松地对SI单位进行编码。 有关示例实现,请参见http://svn.assembla.com/svn/metascala/src/metascala/Units.scala 。
如果单元被编码为单元类型和整数对的TList
,也应该可以支持可扩展单元系统(例如, ((M, _1), (S, _2))
其中M <: Unit
和S <: Unit
)。 在此编码中,计算数量运算的类型会变得有点复杂。
关于性能,总是存在用于将值包装在包含单元信息的类型中的存储器开销。 但是,实际操作中可能没有性能开销,因为所有单元检查都是在编译时完成的。
看看测量单位 - Scala宏系统 。 它似乎满足您的要求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.