Skip to content

Instantly share code, notes, and snippets.

@meganetaaan
Last active January 31, 2017 16:31
Show Gist options
  • Save meganetaaan/b3336155a3515454c9ca35d992368e60 to your computer and use it in GitHub Desktop.
Save meganetaaan/b3336155a3515454c9ca35d992368e60 to your computer and use it in GitHub Desktop.
Rust備忘録

パッケージインストールがやたら遅いのはどうして?

コンパイルしてるから

!ってなに?

関数じゃなくてマクロを呼び出しているらしい

Cargoってなに?

パッケージマネージャ

Rust使い=Rustacean

mutってなに?

mutableを示す修飾子。Rustの変数はデフォルトでimmutable.

String::new(); ってどういうこと?

::修飾子でstatic methodにアクセスしてる

read_line(&mut guess) ってどういうこと?

&で参照渡ししてる。参照もデフォルトimmutableだからmutつけないとだめ。

crateってなに?

Rustコードのパッケージ

.lockファイルはなんのためにあるの?

semverで指定された依存パッケージが更新されてもプロジェクト側で使うパッケージが勝手に更新されないようにできる。

トレイトってなに?

ある型が提供しなければならない機能をコンパイラに伝える言語機能。

トレイトとインターフェースどうちがうの?

where節って何?

トレイトを記述するための構文。 型パラメータのふるまいを定義するだけでなく、既存の型に制約を課すような書き方ができる。

trait ConvertTo<Output> {
    fn convert(&self) -> Output;
}

impl ConvertTo<i64> for i32 {
    fn convert(&self) -> i64 { *self as i64 }
}

// T == i32の時に呼び出せる
fn normal<T: ConvertTo<i64>>(x: &T) -> i64 {
    x.convert()
}

// T == i64の時に呼び出せる
fn inverse<T>() -> T
        // これは「ConvertTo<i64>」であるかのようにConvertToを用いている
        where i32: ConvertTo<T> {
    42.convert()
}

2014年の記事のコードサンプルが全然動かないんだけどそんなに変わってるの?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment