内容へ移動
Cat Paw Software
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
トレース:
•
rvm
•
php
•
ios
rust:spec
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
<markdown> # Rustの言語仕様 ## 所有権 以下のコードはエラーになる ``` fn print(a: String) { println!("{}", a) } let s = String::new("str"); print(s); print(s); // エラー ``` 最初のprint関数に渡した時点で変数sはStringインスタンスの所有権を失っており、それ以降の行でアクセスするとエラーになる。 ## 参照 参照を使うと所有権を失わずにデータを渡すことができる。 ``` fn print(a: &String) { println!("{}", a) } let s = String::new("str"); print(&s); print(&s); // 今度はOK ``` ## コピートレイト コピートレイトが実装された型は値を渡すときにコピーされるため、所有権を失わない。また、後述のライフタイムの影響も受けない i32等の基本的な型、chronoライブラリのDateTime型などはコピートレイトを実装している。 自分で構造体にコピートレイトを実装するときは構造体のサイズに気をつけること ## 不変 参照は基本的にで変更不可である ``` fn print(a: &String) { a.insert_str(0, "nyan"); // 参照を変更しようとするとエラーになる println!("{}", a) } let s = String::new("wang"); print(&s); print(&s); ``` 参照を変更したいときはmutable参照型として定義し、引数も変更可能な参照型を受け取るようにする ``` fn print(a: &mut String) { a.insert_str(0, "nyan"); // mutable参照なので変更可能 println!("{}", a) } let s = &mut String::new("wang"); print(s); // wangnyanと出力 print(s); // wangnyannyanと出力 ``` ## ライフタイム </markdown>
rust/spec.txt
· 最終更新: 2022/07/10 04:00 by
nullpon
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ