Rust 锈病特征。在依赖项库中定义它们是一种习惯,还是可以在使用它们的二进制代码中向类型添加特征?

Rust 锈病特征。在依赖项库中定义它们是一种习惯,还是可以在使用它们的二进制代码中向类型添加特征?,rust,dependencies,traits,toml,Rust,Dependencies,Traits,Toml,我一直在遵循一个使用自定义类型的Rust教程。 因此定义了一个库,该库稍后通过cargo.toml依赖项在rust二进制文件中使用。 最后我提出了几个问题: 是否生锈: 必须在二进制文件中使用的cargo.toml依赖项(main.rs的)引用的库代码(下面是money_typesafe)中定义提供这些功能的特性 允许在使用二进制文件时应用特征 同时允许1)和2) 如果允许使用2,那么在以任何方式定义特征时语法是否会改变 cargo.toml ... [dependencies] mon

我一直在遵循一个使用自定义类型的Rust教程。 因此定义了一个库,该库稍后通过cargo.toml依赖项在rust二进制文件中使用。 最后我提出了几个问题:

是否生锈:

  • 必须在二进制文件中使用的cargo.toml依赖项(main.rs的)引用的库代码(下面是money_typesafe)中定义提供这些功能的特性
  • 允许在使用二进制文件时应用特征
  • 同时允许1)和2)
  • 如果允许使用2,那么在以任何方式定义特征时语法是否会改变

    cargo.toml

    ...
    [dependencies]
    money_typesafe = {path = "../../../2-Traits/10-Day-2-Assignment/day2assign/"}`
    
    main.rs

    ...
    use money_typesafe::currencies::{Money,GBP};
    
    即2)我可以在main.rs中的货币或英镑中添加特征吗?

    脚注:

    我确实找到了github教程的代码。它遵循了选项1的场景。不确定是否存在其他选项,以在其他位置扩展类型的功能

    它涉及:

    • (我认为这里给出的示例没有什么帮助。不使用数字类型和枚举只会弄乱局面)

    你在问题中使用的术语有点模棱两可——我不确定你所说的“应用”一种特质是什么意思。特质的表现方式主要有三种:

  • 可以定义一个trait(在这里指定它所拥有的方法及其关联类型)

  • 可以实现trait(在某种类型上实现trait的方法)

  • 可以使用trait(将其引入范围并调用其方法)

  • 在哪里可以实现特性有一些限制。这些限制被称为“孤立规则”,您将在中找到描述

    该规则规定,除非在板条箱中定义了某个特性,或者在板条箱中定义了要在其上实现该特性的类型,否则无法在类型上实现该特性

    例如,您可以自由定义自己的特性,然后在外来类型(例如std库中的类型或正在导入的其他板条箱中的类型)上实现它们。你也可以自由地在自己的类型上实现外来特性。两者都是常见的模式

    孤儿规则有一个变通方法:“newtype模式”。您可以在中找到有关信息

    因此,要回答您的具体问题:

    rust是否需要在二进制文件中使用的cargo.toml依赖项(main.rs的)引用的库代码(下面是money_typesafe)中定义提供这些功能的特性

    不。性状可以在二元板条箱中定义

    rust是否允许在使用二进制文件时应用特性

    是的,只要trait或实现它的类型,或者二者都在二进制板条箱中定义

    同时允许1)和2)

    是的,根据孤立规则,可以在外部或二进制板条箱内部定义和实现特征

    如果允许使用2,那么在以任何方式定义特征时语法是否会改变


    不,没有。但是需要注意的是,一个特征必须在范围内才能调用其方法,因此有必要
    使用当前范围内未定义的
    特征。

    您在问题中使用的术语有点含糊不清-我不确定“应用”一个特征是什么意思。特质的表现方式主要有三种:

  • 可以定义一个trait(在这里指定它所拥有的方法及其关联类型)

  • 可以实现trait(在某种类型上实现trait的方法)

  • 可以使用trait(将其引入范围并调用其方法)

  • 在哪里可以实现特性有一些限制。这些限制被称为“孤立规则”,您将在中找到描述

    该规则规定,除非在板条箱中定义了某个特性,或者在板条箱中定义了要在其上实现该特性的类型,否则无法在类型上实现该特性

    例如,您可以自由定义自己的特性,然后在外来类型(例如std库中的类型或正在导入的其他板条箱中的类型)上实现它们。你也可以自由地在自己的类型上实现外来特性。两者都是常见的模式

    孤儿规则有一个变通方法:“newtype模式”。您可以在中找到有关信息

    因此,要回答您的具体问题:

    rust是否需要在二进制文件中使用的cargo.toml依赖项(main.rs的)引用的库代码(下面是money_typesafe)中定义提供这些功能的特性

    不。性状可以在二元板条箱中定义

    rust是否允许在使用二进制文件时应用特性

    是的,只要trait或实现它的类型,或者二者都在二进制板条箱中定义

    同时允许1)和2)

    是的,根据孤立规则,可以在外部或二进制板条箱内部定义和实现特征

    如果允许使用2,那么在以任何方式定义特征时语法是否会改变


    不,没有。但是需要注意的一点是,trait必须在范围内才能调用其方法,因此有必要
    使用当前范围内未定义的
    trait。

    这会有所帮助。。但我的意思是在库中定义了一个类型。。。但这些特征还不够详尽。。我通过依赖关系在二进制文件中使用该类型。我是否可以在“那里”(声明类型的库之外)创建新特性,并说库中的类型实现了这个特性?这些特性有时可能只适用于我的代码,不值得放在库代码中。干杯。这有点帮助。。但我
    use std::ops::AddAssign;
    use std::ops::Neg;