gpt4 book ai didi

casting - 避免转换浮点常量

转载 作者:行者123 更新时间:2023-11-29 08:33:59 27 4
gpt4 key购买 nike

我正在创建 cargo (除其他外)将实现惯用的角度测量。在创建角度单位之间的转换方法时,我发现了问题:

impl<T> Angle<T>
where T: Float {
pub fn to_deg(self) -> Self {
Deg(match self {
Rad(v) => v * cast(180.0 / f64::consts::PI).unwrap(),
Deg(v) => v,
Grad(v) => v * cast(180.0 / 200.0).unwrap() // how to get rid of this cast?
})
}
}

Runnable

180.0/200.0 的类型转换对我来说真的不需要吗?有什么办法可以摆脱这种情况吗?

当我删除 Actor 时,我得到:

src/angles.rs:42:28: 42:33 error: mismatched types:
expected `T`,
found `_`
(expected type parameter,
found floating-point variable) [E0308]
src/angles.rs:42 Grad(v) => v * 180.0 / 200.0
^~~~~

最佳答案

当你有一个带有类型参数的泛型函数时,例如 T您无法选择类型。该类型由函数的调用者强加给您。

这里的错误是你试图分配一个特定的 f32/f64输入类型 T ,它可以是实现 Float任何 .

你知道在实践中它会是浮点类型之一,但理论上类型系统不会阻止某人实现 Float在字符串或数组,或两个函数指针的元组,或任何其他无法分配 float 的奇怪事物上。当编译器不能保证它会一直工作时,包括在理论上将来,那么它不会接受它。

如果你想给T赋一个浮点值,你必须声明这个操作是可能的,例如通过添加 f32: Into<T> ,并使用 180f32.into() .

关于casting - 避免转换浮点常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28305478/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com