7 个不稳定版本

0.5.1 2024年6月22日
0.5.0 2024年6月15日
0.4.1 2022年12月31日
0.3.1 2022年1月24日
0.2.1 2022年1月18日

#10 in #measurement

MIT 许可证

63KB
1.5K SLoC

dims

这允许存储诸如距离或质量等值,同时防止将克加到英尺上。

意图是将这些值保留在内存中作为 MassLength,无需担心单位,除非在创建值时以及访问它时(用于显示、存储等)。

重要

这仍然是一个进行中的项目。请期待粗糙的边缘,但我正在努力使之平滑。

用法

如果您只想使用预生成的单位(正在进行中:创建更多)

// Be sure you include prelude; this exposes required traits
use dims::prelude::*;
use dims::us::*;
use dims::si::*;

let feet = FOOT.from(12.5);
let mm = MILLIMETRE.from(317.5);
assert_eq!(feet, mm);
// You can add between different systems
// They are all stored as `metre` here, anyway
let another = feet + mm;
// You can also multiply to get area (and on further to get volume)
let area = feet * mm;
assert_eq!(area, SQFT.from(156.25));
let mass = GRAM.from(18.25);
// You can also create them the other way around
let this_works = Measure::new(&INCH,0.125);
// You can grab the stored value as a float via
let raw = mm.val_as(&INCH);
// The compiler will not allow you to add between systems:
// let nope = mass + area; // <== Compiler throws an error

基础结构和特质

  • MeasureSystem:一个度量系统(例如:长度、质量、体积),用于防止 Measure 之间的交叉。这些在 dims 中实现。
  • Measure:实际存储的值。创建的任何值(如英寸或磅)都将转换为基本单位(例如:长度为米,质量为克)。
  • UnitTrait:一个用于创建单位类型的特质。这允许创建单位之间的自定义转换函数。在几乎所有情况下,都可以使用 UnitSimple
  • UnitSimpleUnitTrait 的基本实现。指定单位和基本单位之间的比率以及偏移量。
  • UnitFormat:比 UnitTrait 更复杂的实现。指定单位和基本单位之间的比率以及偏移量。此外,还存储单位的文本名称。

dims


这包含一组预制的系统和单位。随着时间的推移,将不断添加。

当前系统是

系统 基本单位 debug_us
长度 英寸
面积 平方米 平方英寸
体积 立方米 立方英寸
质量
温度 开尔文* 华氏度

*关于温度的说明

  • 不检查负值,因为吸热反应在应用于环境时会有负值。
  • 此调试单位的为摄氏度

其他说明

性能

与存储值(从我非常基础的测试中可以看出)相比,对发布性能没有可测量的影响。`Measure`结构体是`[repr(transparent)]`,因此除了值本身之外的所有内容都被优化掉了。调试模式代码会对性能产生影响。

dims的包选项

  • f64可用作为选项;默认为f32。使用自定义单位时可以指定其他数据类型(请参阅dims_core
  • std是默认选项,默认使用标准库。
    这启用了UnitFormatTrait(因为函数返回String),但仍然可以使用no_stdstr(见下文)来存储单位名称信息。
  • str(默认)将利用UnitFormat并存储
    • abbr:单位名称的缩写(例如mft
    • singular:单位的单数名称(例如metrefoot
    • plural:单位的复数名称(例如metresfeet
  • si提供SI/公制单位(默认开启)
  • us提供美制单位(默认开启)
  • debug_us将使用上表指定的单位进行调试。

重要

在上面的选项中选择usdebug_us将不会改变基本单位。它仍然以SI为单位存储。

依赖项

~0.4–0.9MB
~20K SLoC