スポンサーリンク

Rustでソースコードを二つ以上のファイルに分割する

1.main.rsの隣にあるファイルを読み込む

呼び出し側で、

mod ファイル名

use ファイル名::関数名

と書いておけば、呼び出せるようになる。

あと、構造体や関数が別ファイルに分かれている場合、先頭にpubをつけておかなければいけない。

同じディレクトリにmain.rsとmyfile.rsがある場合、以下のように記述する。

main.rs


// main.rs エントリポイントのあるファイル

// mod ファイル名
mod myfile;
// use ファイル名::関数名(など)
use myfile::myfunction; // 使いたいものだけ ファイル名::シンボル use myfile::myparam; // use myfile::*; も可能 fn main() { let ab:myparam = myparam{a:1,b:2.0}; myfunction(&ab); }

myfile.rs


// myfile.rs 分離したファイル

// 関数の先頭にpubをつける
pub fn myfunction(ab : &myparam){ println!("{} {}",ab.a,ab.b); } // 構造体の先頭にpubをつける pub struct myparam{ pub a:i32, // メンバにも pub をつける pub b:f32, }

https://zenn.dev/newgyu/articles/3b4677b4086768

2.自分の隣のファイルを読み込む

main.rs ,  sibling_1st.rs,sibling_2nd.rsがすべて同じ階層にあった場合、main.rsは自分の隣をmodだけで読み込めるが、それ以外は#[path=""]の形でパスを指定しなければならないらしい。

main.rs

// main.rs

// mod ファイル名
mod sibling_1st;

fn main() {

    sibling_1st::fnc_1st();

}

sibling_1st.rs

// sibling_1st.rs

#[path = "./sibling_2nd.rs"]
mod sibling_2nd;

pub fn fnc_1st(){

    sibling_2nd::fnc_2nd();

}

sibling_2nd.rs

// sibling_2nd.rs

pub fn fnc_2nd(){

    println!("my3rd!!!");

}

3.自分の隣のディレクトリ内のファイルを読み込む

読み込みたいファイルがサブディレクトリにある場合、そのディレクトリ名と同じ名前のrsファイルを置き、中にそれ以下のファイル名をmodで指定する。

main.rs

// stc/main.rs

// mod ファイル名
// 同名のディレクトリを同じ位置に存在させている
mod mydir;

fn main() {

    mydir::sub_1st::fnc_1st();

}

mydir.rs

// stc/mydir.rs

pub mod sub_1st;
pub mod sub_2nd;

sub_1st.rs

// src/mydir/sub_1st.rs

#[path = "./sub_2nd.rs"]
mod sub_2nd;

pub fn fnc_1st(){

    sub_2nd::fnc_2nd();

}

sub_2nd.rs

// src/mydir/sub_2nd.rs

pub fn fnc_2nd(){

    println!("fnc_2nd called");

}

2 件のコメント

  • 「自分の隣」という表現がよくわかりません。
    「隣」とは何ですか?どういう意味なんですか?

    • 自分= 呼び出し元
      隣 = 呼び出し元と同じ階層にあるファイル

      というつもりで書いています。
      確かにあいまいな表現ですね。すみません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: