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日 |
在 科学 中排名 613
每月下载量 25
在 3 crates 中使用
16KB
241 行
dims_core
这个 Crates 集合用于设置类型安全的测量。
这允许创建诸如距离或质量的存储类型,以及防止将克加到英尺上。
目的是将这些值保留在内存中作为 Mass
或 Length
,无需担心单位,除非创建值或访问它(用于显示、存储等)。
重要
这仍处于开发中。请期待一些粗糙的边缘,但我正在努力使它们变得平滑。
系统和单位创建
这些特定的系统已在 dims
中设置,但你也可以设置自己的系统
UnitSimple
使用的转换公式如下
/// Convert the given value from this unit into the base
fn to_base(&self, val: Flt) -> Flt {
(val + self.offset) * self.ratio
}
/// Convert the given value (as the base unit) into this unit
fn to_self(&self, val: Flt) -> Flt {
(val / self.ratio) - self.offset
}
这允许具有相同零点的基本单位(其中大部分),以及具有不同零点(如温度)的单位。
- 用于构建一组单位的核心组件。
- 这里不存储任何实际单位(甚至测量系统)。
- 如果想要自己创建
Unit
或MeasureSystem
,则可以直接使用此 crate。 - 存储的值未指定,而是保持通用。最常见的选择可能是
f32
和f64
(如在此处的dims
crate 中使用),但保持通用。
基本结构和特质
MeasureSystem
:测量系统(例如长度、质量、体积),用于防止测量值之间的交叉。这些在dims
中实现。Measure
:存储的实际值。创建的任何值(如英寸或磅)都将转换为基本单位(例如长度为米,质量为克)。UnitTrait
:用于创建单位类型的特质。这允许创建单位之间的自定义转换函数。在几乎所有情况下,都可以使用UnitSimple
。UnitSimple
:是UnitTrait
的基本实现。指定单位和基础单位之间的比例以及偏移量被指定。UnitFormat
:是UnitTrait
的一个更复杂的实现。指定单位和基础单位之间的比例以及偏移量。此外,还存储了单位的文本名称。
其他重要项目
MultiplyBy
&DivideBy
:允许在不同单位系统之间进行转换的特质。例如Length
*Length
=Area
Length
*Area
=Volume
Volume
/Area
=Length
- 您还可以通过存储的数据类型进行乘法和除法。例如
let len = MM.from(8.0);
let two = len * 2.0;
let one = two / 2.0;
DEBUG_UNIT
是调试时值将如何显示。这可能是您想要显示的方式,但应该由消费代码明确指定。
其他说明
性能
与存储值相比,发布性能没有可测量的影响(从我非常基本的测试中可以看出)。Measure
结构是[repr(transparent)]
,所以除了值本身之外的所有内容都进行了优化。然而,调试模式代码会对性能产生影响。
存储选项
std
是默认选项,默认使用标准库。
这启用了UnitFormatTrait
(因为函数返回String
),但no_std
仍然可以与str
一起使用(见下文)来存储单位名称信息。str
(默认)将利用UnitFormat
并存储abbr
:缩写单位名称(例如m
或ft
)singular
:单位的单数名称(例如metre
或foot
)plural
:单位的复数名称(例如metres
或feet
)
依赖项
~0.3–0.8MB
~19K SLoC