繁体   English   中英

是否有可能为Scala中的测量单位实施F#的基础设施?

[英]Is it possible to implement F#'s infrastructure for Units of Measurement in Scala?

F#附带了对测量单位系统的特殊支持,该系统提供静态类型安全性,同时编译为数字类型,而不是通过包装/展开操作增加运行时的负担。

是否有可能使用一些Scala的类型系统魔法来实现与之相当的东西?

答案是否定的

现在,有人必然会指向Scalar ,但这会给运行时检查。 或许,然后,指出Jesper Nordenberg的类型安全单位或Jim McBeath 对它的努力 ,但这些都很麻烦和笨拙。

我会指出,而不是Units编译器插件 它给了斯卡拉,在2008/2009,一个非常好的单位系统,正如在这篇文章中可以看到 但是,它通过扩展编译器来实现,如果类型系统足够的话,这不是必需的。 唉,它没有被维护,它不再起作用了。

的种类。 您可以使用指数元组中的整数类型表示来非常轻松地对SI单位进行编码。 有关示例实现,请参见http://svn.assembla.com/svn/metascala/src/metascala/Units.scala

如果单元被编码为单元类型和整数对的TList ,也应该可以支持可扩展单元系统(例如, ((M, _1), (S, _2))其中M <: UnitS <: Unit )。 在此编码中,计算数量运算的类型会变得有点复杂。

关于性能,总是存在用于将值包装在包含单元信息的类型中的存储器开销。 但是,实际操作中可能没有性能开销,因为所有单元检查都是在编译时完成的。

看看测量单位 - Scala宏系统 它似乎满足您的要求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM