アクセス修飾子
-
Rustでの
public
はpub
になってprivate
の場合は先頭は何もなしでprivate
扱いになる// public pub fn 関数名 { } pub mod モジュール名 { } // private fn 関数名 { } mod モジュール名 { }
struct、implについて
- Rustにはclassがないため、代わりに
struct
、impl
、trait
を使用する
【struct】
-
struct
とは構造体を定義する時に使用する- 構造体とは異なる型のデータをひとまとめにしたもの
- データ名と型を構造体の中に定義する
struct user { pub name: String, }
【impl】
-
impl
はstruct
上で動作する関数を定義することができる-
impl
は、struct
と同名にすることでstruct
のApple
に対して実装を行ってるという認識になる
pub struct Animal { pub name: String } impl Animal { pub fn get_name(&self) -> &str { &self.name } }
use web_app::models::users::Animal; fn main() -> (){ let animal = Animal { name: "ゴリラ".to_string()}; println!("{}", Animal::get_name(&animal)); }
-
use、extern create、modについて
【extern crate】
- 外部のクレート(ライブラリ)をインポートする時に使う
-
lib.rs
に定義するだけで基本的には使用できるようになる
extern crate diesel;
【mod】
-
モジュールとは機能の集まりで関数、モジュールがまとめられている
-
モジュールの定義には3つある
-
mod モジュール名 { … }
で定義 -
同じファイル内で
mod
を定義して使用する```rust // モジュール定義 pub mod my_mod { // 関数の定義 pub fn log(a: &str) { // ターミナルに引数でもらった値を表示 println!("{}",a); }
}
fn main() -> (){
// 上記のmy_modのlog関数を利用
my_mod::log("テスト 太郎");
}
-
-
モジュール名.rs
を作ってlib.rs
にpub mod モジュール名
と書いて定義する。つまりファイルからモジュールを定義する。-
別ファイルでモジュールを定義
// モジュール定義 pub mod my_mod { // 関数の定義 pub fn log(a: &str) { // ターミナルに引数でもらった値を表示 println!("{}",a); } }
-
lib.rs
で下記のようにmod
を定義pub mod sample;
-
main.rs
でuse
を扱って読み込んで使用- 今回の場合のパスは
プロジェクト名/ファイル名/モジュール名
use web_app::sample::my_mod; fn main() -> (){ my_mod::log("テスト 太郎 "); }
- 今回の場合のパスは
-
-
モジュール名/mod.rs
を作って、lib.rs
にpub mod モジュール名
と書いて定義する-
新しくディレクトリを作成してその配下に
mod.rs
を作成してmod
を定義pub mod sample;
-
さらに作成したディレクトリ配下に
モジュール名.rs
を作成してmod
を定義// モジュール定義 pub mod my_mod { // 関数の定義 pub fn log(a: &str) { // ターミナルに引数でもらった値を表示 println!("{}",a); } }
-
main.rs
でuse
を扱って読み込んで使用use web_app::sample_mods::sample::my_mod; fn main() -> (){ my_mod::log("テスト 太郎"); }
-
【use】
-
use
は各ファイルでモジュール
、ライブラリ
などのインポート
時に利用する -
別ファイルで定義しているモジュールを使いたい場合に使用
use web_app::sample::my_mod fn main() -> (){ my_mod::log("テスト 太郎"); }
-
ライブラリなども同様で
use
でパスを指定すれば使用する事ができるuse web_app::sample::my_mod use chrono::Local; fn main() -> (){ my_mod::log("テスト 太郎"); // 現在の日付と時刻を表示 println!("{}", Local::now()); }
-
使用したライブラリ
- パスについて
- 先頭に
create
、プロジェクト名
、ライブラリ名
などで始まるパスは絶対パス
-
self
かsuper
で始まるパスは相対パス
- 下記のリンクにもパスについて記載がある
- 先頭に
-
as
で名前を変更することも可能use web_app::sample::my_mod as test; fn main() -> (){ test::log("テスト 太郎"); }
まとめ
-
struct
は構造体 -
impl
を利用する事でstruct
に動作を実装する事ができる - 外部のクレート(ライブラリ)を使用する場合は
lib.rs
にextern crate クレート名
- モジュールは
pub mod モジュール名{ 関数、モジュール }
で詳細を定義してlib.rs
ormod.rs
にpub mod モジュール名
で定義してuse
で使用ができる -
use
は絶対パスか相対パスでモジュールやライブラリをインポートして使用する事ができる