为什么新类型不使用内部类型的特征?

罗里

在rust 1.0.0-nightly中,此代码可以正常工作:

fn main() {
    let x = 10f64;
    let y = 20f64;
    let z = x + y;
    println!("z = {}", z);
}

但是,如果我尝试使用新类型(根据rust book):

struct Metres(f64);

fn main() {
    let x = Metres(10f64);
    let y = Metres(20f64);
    let z = x + y;
    println!("z = {}", z);
}

我收到此编译器错误:

test.rs:6:13: 6:18 error: binary operation `+` cannot be applied to type `Metres`
test.rs:6     let z = x + y;
                      ^~~~~
error: aborting due to previous error

既然Metres基本上是a f64,为什么编译器不能使用相同的+运算符,并Metres为此创建新对象z

如果我不能做诸如添加之类的简单事情,该如何使用新类型?它们如何“非常有用”(如书中所称)?

对此有一个老问题,但锈蚀变化很大,因此我要提出要求)

斯科特·奥尔森

新类型以这种方式工作的原因通常是因为您避免在基础类型上定义的特征。例如,您可能拥有MetresFeet两者都包装f64但定义了的加法MetresFeet进行单位转换,而普通的f64加法则不给您。

当然,有时您确实需要基础特征实现。当前,您必须自己编写一个包装实现,但是有一个RFC可以自动生成这些包装:https : //github.com/rust-lang/rfcs/issues/479

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么不使用is_const类型特征将const引用视为const?

来自分类Dev

为什么我不能使外部类型看起来像c ++中的内部类型?

来自分类Dev

std :: enable_if使用其内部类型且不使用它

来自分类Dev

使用内部类作为类型参数

来自分类Dev

为什么在Java中不使用int基本类型

来自分类Dev

为什么在Java中不使用int基本类型

来自分类Dev

CheckStyle“内部类型最后”规则背后的动机是什么?

来自分类Dev

从匿名指针类型检索内部类型

来自分类Dev

如何获取模板类型的内部类型?

来自分类Dev

为什么Scala编译器不使用抽象类型来推断类型

来自分类Dev

为什么协议的关联类型在Swift中不使用通用类型语法?

来自分类Dev

如何使用AutoMapper动态映射内部类型

来自分类Dev

内部类通用类型与外部类型相同

来自分类Dev

为什么需要导入特征以使用它为类型定义的方法?

来自分类Dev

为什么在特征方法声明中允许使用非大小类型?

来自分类Dev

为什么FutureTask不使用AQS内部了?

来自分类Dev

当使用反射实例化内部类时,InstantiationException。为什么?

来自分类Dev

scala为什么不推断继承特征的类型成员?

来自分类Dev

scala为什么不推断继承特征的类型成员?

来自分类Dev

警告:使用内部类时,类型参数E正在隐藏类型E

来自分类Dev

Scala:比较内部类对象的类型

来自分类Dev

为什么只使用别名声明枚举而不使用.NET类型?

来自分类Dev

即使不使用引用,为什么我的List <Point>类型的变量也被更改?

来自分类Dev

Java支持通用类型和方法。为什么不使用通用字段?

来自分类Dev

为什么String用A进行类型检查,但List [Int]不使用List [A]?

来自分类Dev

为什么不使用非类型模板参数实现std :: bind的占位符?

来自分类Dev

为什么不使用正则表达式模式作为javascript数据类型?

来自分类Dev

为什么我的自定义帖子类型不使用我的自定义模板?

来自分类Dev

为什么要定义一个_struct然后不使用_对其进行类型定义?

Related 相关文章

  1. 1

    为什么不使用is_const类型特征将const引用视为const?

  2. 2

    为什么我不能使外部类型看起来像c ++中的内部类型?

  3. 3

    std :: enable_if使用其内部类型且不使用它

  4. 4

    使用内部类作为类型参数

  5. 5

    为什么在Java中不使用int基本类型

  6. 6

    为什么在Java中不使用int基本类型

  7. 7

    CheckStyle“内部类型最后”规则背后的动机是什么?

  8. 8

    从匿名指针类型检索内部类型

  9. 9

    如何获取模板类型的内部类型?

  10. 10

    为什么Scala编译器不使用抽象类型来推断类型

  11. 11

    为什么协议的关联类型在Swift中不使用通用类型语法?

  12. 12

    如何使用AutoMapper动态映射内部类型

  13. 13

    内部类通用类型与外部类型相同

  14. 14

    为什么需要导入特征以使用它为类型定义的方法?

  15. 15

    为什么在特征方法声明中允许使用非大小类型?

  16. 16

    为什么FutureTask不使用AQS内部了?

  17. 17

    当使用反射实例化内部类时,InstantiationException。为什么?

  18. 18

    scala为什么不推断继承特征的类型成员?

  19. 19

    scala为什么不推断继承特征的类型成员?

  20. 20

    警告:使用内部类时,类型参数E正在隐藏类型E

  21. 21

    Scala:比较内部类对象的类型

  22. 22

    为什么只使用别名声明枚举而不使用.NET类型?

  23. 23

    即使不使用引用,为什么我的List <Point>类型的变量也被更改?

  24. 24

    Java支持通用类型和方法。为什么不使用通用字段?

  25. 25

    为什么String用A进行类型检查,但List [Int]不使用List [A]?

  26. 26

    为什么不使用非类型模板参数实现std :: bind的占位符?

  27. 27

    为什么不使用正则表达式模式作为javascript数据类型?

  28. 28

    为什么我的自定义帖子类型不使用我的自定义模板?

  29. 29

    为什么要定义一个_struct然后不使用_对其进行类型定义?

热门标签

归档