2016-04-03 5 views
15

輸入について話すとき、という語句preludeは、しばしば錆びた人によって使用されます。前奏とは何ですか?

この文章はのpreludeに関するものですか?

錆のプログラムにはどのような影響がありますか?錆で

答えて

13

、記号を使用するためには、次のことを行う必要があり、次のいずれか

  • useディレクティブを経て現在のスコープ内のシンボルをインポートしている現在のスコープでシンボルを定義している:use std::mem;
  • std::mem::replace

しかしながら、いくつかの非常に少数のシンボルは、このようなアクションなしで使用することができる:

  • は、絶対パスを使用してシンボルを参照すること。たとえばOptionまたはCopy

    これはRust preludeが原因です。

    多くの形質、型および機能が頻繁に使用されていると判断され、必要な記号を毎回明示的にインポートする必要がないことを意味しました。これは、コンパイラによって撮影した2つの暗黙の行動のおかげで達成されています。すべてのクレートのルートに

    • 、コンパイラは、コンパイラが暗黙のuse std::prelude::v1::*;(今のところ)
    • を注入し、すべてのモジュール内の暗黙の extern crate std;
    • を注入します

    std::prelude::v1は、よく使用されるシンボルを構文で再エクスポートする単なるモジュールです。正確な内容はhereです。 use xxx::prelude::*;


    他のライブラリ、または標準ライブラリのも、サブコンポーネントの数はまた、あなたが同じグロブインポート構文でインポートすることがpreludeモジュールを定義します。しかし、これらはコンパイラによって特殊化されていないため、明示的にインポートする必要があります。


    コンパイラは、1つの(例えば、組み込み開発で)、その後1が自分のstd::prelude::v1モジュールに入るかを決めるだろう、独自にstdクレートを置き換えることだったのであれば、前奏曲の正確な内容にとらわれません。

  • +0

    @LukasKalbertodt:ああ、私は「vec!」、「パニック!」という答えを書いていましたが、どこから来たのか分かりませんでした。私はそれを削除します。 –

    +0

    [This RFC](https://github.com/rust-lang/rfcs/pull/890)では、プレリュード機能をユーザーのクレートに追加することを提案しています。それはしばらく前に閉鎖されていましたが、将来復活するかもしれません。 @MatthieuM。 –

    +0

    。明確な説明をありがとう。 'println!'マクロは 'std :: prelude'から来ていないようですね。 –

    関連する問題