やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Rustのインポートまとめ(Rust2018)

 複雑すぎて理解不能なので簡単にまとめてみた。

概要

 Rust言語にて、外部ファイルに定義したモジュールをインポートする方法をまとめる。

まとめ

    1. 親子関係の定義
    2. 子モジュール/mod.rsというディレクトリとファイルで、子モジュールを外部ファイル化する
    3. 親ファイルの最上位スコープでmod 子モジュール;と書くことで、親子関係と可視性(pub)を定義する
    1. 参照(親子)
    2. 2-1. 外部クレート: pub use 外部クレート名::pubな要素名;
    3. 2-2. 自クレート: crate::pubな要素名;
    4. 2-3. 自モジュール: self::要素名;
    5. 2-4. 親モジュール: super::要素名;
    6. 2-5. 子モジュール: 子モジュール名::pubな要素名;
    1. 参照(親子以外)
    2. どこから
      • use crate::my_mod;
      • use super::brother;
      • use self::child;
    3. 何を(すべて)
      • use self::child::*;
    4. 何という名前で(C
      • use self::child as C;
    5. 公開もしたい(pub
      • pub use crate::my_mod;

参考

 超むずい。正確な理解は後回しにしよう。入門者だし。でも非常にありがたい情報。感謝。

言語仕様

  • Rust2015
  • Rust2018

 バージョンによって違いがある。

  • ::でなくcrate::絶対パス指定するようになった
  • extern preludeという外部クレートがスコープに入る機能が追加された
    • extern crate クレート名;は使わない
      • 外部クレート: main.rsではuse 外部クレート名;とすればOK
      • 自クレート: crate::lib.rsに定義されたpubな要素名とすればOK

所感

 以下のドキュメントで学習していたが、バージョン差異があるなんて聞いてないぞ……。Rust2015のインポートで説明されているっぽい。

 ネットでググっても2015の説明しかなかったりする記事もあって情報が錯綜している感。Pythonを学習していたときもこうだったな……。

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1219 SMP Tue May 14 21:20:58 BST 2019 armv7l GNU/Linux

前回まで