web-dev-qa-db-ja.com

Rust 2018でクレートを慣用的にエイリアスする方法は?

私は木枠foo_sysを持っています。 Rust 2015では便宜上extern crate foo_sys as fooを使用しましたが、Rust 2018 extern crateはもう必要ないので、必要ありませんエイリアシングにのみ使用したい。extern crateを削除すると、

エラー [E0463]fooのクレートが見つかりません

11
Tim Diekmann

これは、 rename-dependency Cargo feature、available in Rust 1.31 =。この機能を使用すると、依存関係にパッケージ属性を提供できます。

名前変更依存関係機能を使用すると、ソースとは異なる名前の依存関係をインポートできます。これは、いくつかのシナリオで役立ちます。

  • 異なるレジストリからの同じ名前の箱によって異なります。
  • クレートの複数のバージョンによって異なります。
  • Rust source。extern crate foo as barを必要としないでください

書く代わりに

[dependencies]
foo_sys = "0.2"

packageキーはCargo.tomlの依存関係に追加できます。

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

慣用的な解決策は、Cargo.tomlでクレートの名前を変更することです。詳細については、 Tim Diekmannによる回答 を参照してください。

ただし、何らかの理由でCargo.tomlの名前変更を使用したくない場合でも、古い構文を使用できます。ソフト非推奨ですが、削除されていません。したがって、これは引き続き機能します。

extern crate foo_sys as foo;

遊び場の例

7