【问题标题】:How to idiomatically alias a crate in Rust 2018?如何在 Rust 2018 中为 crate 起惯用别名?
【发布时间】:2018-12-02 14:54:09
【问题描述】:

我有一个箱子foo_sys。在 Rust 2015 中,为了方便起见,我使用了 extern crate foo_sys as foo,但在 Rust 2018 中,extern crate 不再需要,我不想仅将它用于别名。删除 extern crate 时,我得到了

error[E0463]: 找不到 foo 的 crate

【问题讨论】:

    标签: rust rust-cargo rust-2018


    【解决方案1】:

    这可以通过rename-dependency Cargo 功能available in Rust 1.31 来实现。使用此功能,可以为依赖项提供包属性:

    重命名依赖项功能允许您导入与源名称不同的依赖项。这在以下几种情况下很有用:

    • 取决于来自不同注册表的同名 crate。
    • 取决于一个 crate 的多个版本。
    • 避免在 Rust 源代码中使用 extern crate foo as bar

    而不是写

    [dependencies]
    foo_sys = "0.2"
    

    package 键可以添加到 Cargo.toml 中的依赖项中:

    [dependencies]
    foo = { package = "foo_sys", version = "0.2" }
    

    警告Cargo prior to Rust 1.26.0 may download the wrong dependency 使用此功能时!

    【讨论】:

      【解决方案2】:

      惯用的解决方案是重命名 Cargo.toml 中的 crate。有关更多信息,请参阅the answer by Tim Diekmann

      但是如果你出于某种原因不想使用Cargo.toml 重命名,你仍然可以使用旧语法。它已被软弃用,但未删除。所以这仍然有效:

      extern crate foo_sys as foo;
      

      (Playground example)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-10
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        相关资源
        最近更新 更多