1

我正在尝试在我的 Rust 项目中使用 crate 'num'(我完全是这种语言的新手),所以我的 Cargo.toml 现在是:

[package]

name = "hello_world"
version = "0.0.1"
authors = [ "Vini" ]

[dependencies]

time = "*"
num = "*"

但是当我运行时:

cargo run

我得到这个编译错误:

/.cargo/registry/src/github.com-0a35038f75765ae4/num-0.0.6/src/bigint.rs:66:16: 66:19 error: expected identifier, found keyword `mod`

/.cargo/registry/src/github.com-0a35038f75765ae4/num-0.0.6/src/bigint.rs:66 use std::str::{mod, FromStr};

                                                                                           ^~~

/.cargo/registry/src/github.com-0a35038f75765ae4/num-0.0.6/src/bigint.rs:80:27: 80:28 error: expected one of `(`, `+`, `::`, `;`, `<`, or `]`, found `,`

/.cargo/registry/src/github.com-0a35038f75765ae4/num-0.0.6/src/bigint.rs:80 static ZERO_VEC: [BigDigit, ..1] = [ZERO_BIG_DIGIT];
                                                                                                      ^
Could not compile `num`.

我不知道这实际上意味着什么,我是不是用错了货物?这个版本的 'num' 与 cargo 不兼容吗?

我有货运版本:

cargo 0.4.0-nightly (15b497b 2015-07-08) (built 2015-07-10)

和锈编译器:

rustc 1.2.0 (082e47636 2015-08-03)
4

1 回答 1

3

简短的回答

您的 Cargo.lock 文件包含对旧版本的 crate 的引用(在本例中是一个非常旧的版本)。运行cargo update以获取最新版本。

为什么

在构建代码时,您可以使用Cargo.toml文件将所需的版本限制传达给 Cargo。这让您可以说“至少这个版本”或“只有这个确切的版本”或“这个版本的任何错误修复”。

Cargo 接受您的限制和当前可用的版本,并计算适合您的最新版本集,或者告诉您是否不能。然后它将所有这些数据保存到Cargo.lock文件中。

Cargo.lock 文件会一直存在,这样库的版本就不会在你手下随意改变。您可以运行cargo update以重做该过程并获取最新版本。

如果您正在制作一个图书馆,那么故事就到此结束。如果您正在生成二进制文件,则应将锁定文件签入源代码控制,因为这就是您与代码的其他用户准确沟通应该使用哪些版本的方式。当您部署代码版本时,您可以确保在生产中使用与开发相同的版本。

于 2015-09-17T02:38:08.667 回答