rust文档中提到了newtype的习惯用法,我想把它用在float上:struct MyFloat(f32)。然而,将其用作浮点数可能有点麻烦。我以为我已经在num-derive crate中找到了解决方案,但它不起作用:
struct MyFloat(f32)
#[derive(num_derive::Float)] struct MyFloat(f32);
在Rust Explorer中这些行会导致许多关于未实现的traits Neg、NumCast等的错误。我还需要别的东西才能让它工作吗
jtoj6r0c1#
Float trait有一些supertrait,num_derive::Float没有实现它们,只有Float本身。幸运的是,num-derive也为它们提供了#[derive] s:
Float
num_derive::Float
num-derive
#[derive]
#[derive( Clone, Copy, PartialEq, PartialOrd, num_derive::Float, num_derive::Num, num_derive::NumCast, num_derive::Zero, num_derive::One, num_derive::NumOps, num_derive::ToPrimitive, )] struct MyFloat(f64);
不幸的是,这仍然会出错,因为Neg是必需的,但尚未实现。您可以手动实现它:
Neg
impl std::ops::Neg for MyFloat { type Output = MyFloat; fn neg(self) -> Self::Output { Self(-self.0) } }
1条答案
按热度按时间jtoj6r0c1#
Float
trait有一些supertrait,num_derive::Float
没有实现它们,只有Float
本身。幸运的是,num-derive
也为它们提供了#[derive]
s:不幸的是,这仍然会出错,因为
Neg
是必需的,但尚未实现。您可以手动实现它: