0

我正在尝试使用 Cargo 使用“actix-web”板条箱。我在 Windows 10 上使用 WSL 版本的 Ubuntu。

我跑的步骤:

  • 使用安装 Cargo(和 Rust)sudo apt install cargo
  • 使用创建了一个项目cargo new hello
  • 在文件actix-web = "0.7.8"下添加[dependencies]Cargo.toml
  • cargo run并得到以下编译错误:
error[E0658]: non-reference pattern used to match a reference (see issue #42640)
--> /home/ash/.cargo/registry/src/github.com-1ecc6299db9ec823/ring-0.13.2/build.rs:375:9
    |
375 |     let (_, _, perlasm_format) = ASM_TARGETS.iter().find(|entry| {
    |         ^^^^^^^^^^^^^^^^^^^^^^ help: consider using a reference: `&(_, _, perlasm_format)`

error[E0658]: non-reference pattern used to match a reference (see issue #42640)
--> /home/ash/.cargo/registry/src/github.com-1ecc6299db9ec823/ring-0.13.2/build.rs:674:9
    |
674 |     for (src, dst) in src_dst {
    |         ^^^^^^^^^^ help: consider using a reference: `&(src, dst)`

error[E0658]: non-reference pattern used to match a reference (see issue #42640)
--> /home/ash/.cargo/registry/src/github.com-1ecc6299db9ec823/ring-0.13.2/build.rs:737:35
    |
737 |             RING_SRCS.iter().any(|(_, f)| cmp(f)) ||
    |                                   ^^^^^^ help: consider using a reference: `&(_, f)`

error[E0658]: non-reference pattern used to match a reference (see issue #42640)
--> /home/ash/.cargo/registry/src/github.com-1ecc6299db9ec823/ring-0.13.2/build.rs:741:35
    |
741 |             RING_SRCS.iter().any(|(_, f)| cmp(f)) ||
    |                                   ^^^^^^ help: consider using a reference: `&(_, f)`

我尝试使用通配符依赖项,但我无法让它工作。

rustc是版本1.25.0
cargo是版本0.26.0

4

1 回答 1

3

根据Actix-web 的 crate page,最新版本 (0.7.8) 需要 Rust 版本 1.26.0 或更高版本。根据您的错误消息,这似乎是因为他们正在利用Rust 1.26.0 中对模式匹配人体工程学所做的一些改进。

可以回滚到旧版本actix-web——版本 0.6.15 似乎是适用于 Rust 1.25.0 的最新版本。但是,您可能会在使用其他库时遇到类似的问题,我绝对建议您更新 Rust,以便您也可以利用这些改进。

更新 Rust 工具链并保持更新的最简单方法是使用Rustup

于 2018-09-19T19:21:25.850 回答