呼び出し側で、
mod ファイル名
use ファイル名::関数名
と書いておけば、呼び出せるようになる。
あと、構造体や関数が別ファイルに分かれている場合、先頭にpubをつけておかなければいけない。
同じディレクトリにmain.rsとmyfile.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 分離したファイル
// 関数の先頭に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
main.rs , sibling_1st.rs,sibling_2nd.rsがすべて同じ階層にあった場合、main.rsは自分の隣をmodだけで読み込めるが、それ以外は#[path=""]の形でパスを指定しなければならないらしい。
// main.rs // mod ファイル名 mod sibling_1st; fn main() { sibling_1st::fnc_1st(); }
// sibling_1st.rs #[path = "./sibling_2nd.rs"] mod sibling_2nd; pub fn fnc_1st(){ sibling_2nd::fnc_2nd(); }
// sibling_2nd.rs pub fn fnc_2nd(){ println!("my3rd!!!"); }
読み込みたいファイルがサブディレクトリにある場合、そのディレクトリ名と同じ名前のrsファイルを置き、中にそれ以下のファイル名をmodで指定する。
// stc/main.rs // mod ファイル名 // 同名のディレクトリを同じ位置に存在させている mod mydir; fn main() { mydir::sub_1st::fnc_1st(); }
// stc/mydir.rs pub mod sub_1st; pub mod sub_2nd;
// src/mydir/sub_1st.rs #[path = "./sub_2nd.rs"] mod sub_2nd; pub fn fnc_1st(){ sub_2nd::fnc_2nd(); }
// src/mydir/sub_2nd.rs pub fn fnc_2nd(){ println!("fnc_2nd called"); }