2020-12-01から1ヶ月間の記事一覧

関数ポインタとクロージャー

関数ポインタ fn do_twice(f: fn(i32) -> i32, arg: i32) -> { f(arg) + f(arg) } // add_one: fn(i32) -> i32 do_twice(add_one, 1); fn: 関数ポインタを表す 関数の引数にわたすことが出来る 3つのクロージャートレイト(Fn, FnMut, FnOnece)を実装している…

Cargo 開発コマンドチートシート

プロジェクトの生成 cargo new プロジェクト名 ./cargo/binディレクトリへのインストール cargo install -path . --path .: カレントディレクトリ配下のCargoプロジェクトをインストールする tomlの編集 cargo-editをインストールする必要がある。 外部クレ…

Result型 のアンラップとエラーの伝搬

Result<T, E>型の特徴 Rustは例外処理が存在しない代わりに、Result型でそれを実現する。 値のアンラップ エラーの伝搬 値のアンラップ unwrap: Err時、panic!を引き起こす unwrap_or: Err時、デフォルト値を返す unwrap_or_else: Err時、デフォルト値を生成する関</t,>…

Result map処理

Resultに用意されているmap処理 map: Okの型を変換する map_err: Errの型を変換する map_or: 値をアンラップする。デフォルト値を渡せる map_or_else: 値をアンラップする。デフォルト値の評価を遅延評価する map(成功時のmap処理) Result<T, E> から Result<U, E>に変換</u,></t,>…

標準入力から文字列を受け取る

<C-c>が入力されるまで受け付ける fn main() { // 標準入力へのハンドルを生成 (各ハンドルはバッファーを共有される) let stdin = std::io::stdin(); // lockすることでバッファーを専有する let stdin = stdin.lock(); // <C-c>が入力されるまで受け付ける for line </c-c></c-c>…

::<T> turbofishの役割

ジェネリクスのパラメーターを指定する 例1 std::any::type_name<T>() -> &'static str fn type_of_val<T>(_val: T) ->&'static str { std::any::type_name::<T>() } 例2 std::iter::Iterator::collect<B>(self) -> B let tokens = "xyz 1 1.0 *".split_whitespace().col</b></t></t></t>…

Stdin::lock(&self)の役割

Stdinの問題 標準入力ストリーム処理を行うためのハンドル。 各ハンドルはグローバルバッファを共有参照する。 そのため1バイト読み込むごとに排他制御が作用し、遅くなる。 Note: ハンドル (handle) ストリームとは流れを意味する。 stdinは、この流れを制…