1

私はRustのプロジェクトでクレート「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 ファイルには古いバージョンのクレート (この場合は非常に古いもの) への参照が含まれています。実行cargo updateして最新バージョンを取得します。

どうして

コードをビルドするときは、 Cargo.tomlファイルを使用して、必要なバージョン制限を Cargo に伝えます。これにより、「少なくともこのバージョン」、「この正確なバージョンのみ」、「このバージョンのバグ修正」などを言うことができます。

Cargo は、制限と現在利用可能なバージョンを取得し、適合するバージョンの最新セットを計算するか、適合しない場合は通知します。次に、そのすべてのデータをCargo.lockファイルに保存します。

Cargo.lock ファイルが残っているので、ライブラリのバージョンが勝手に変更されることはありません。実行cargo updateしてプロセスをやり直し、最新バージョンを取得できます。

ライブラリを作成している場合、話はそこで終わります。バイナリを作成している場合は、ロックファイルをソース管理にチェックインする必要があります。これにより、使用するバージョンをコードの他のユーザーに正確に伝えることができます。コードのリリースをデプロイすると、同じバージョンが本番環境で開発として使用されていることを確認できます。

于 2015-09-17T02:38:08.667 に答える