はじめに
#NO IMAGEThe Rust Programming Language 日本語版 - The Rust Programming Language 日本語版
を読んでいる
お勉強
#- そろそろ面倒になってきた
- 逆から読んでみるか
NO IMAGEパターン記法 - The Rust Programming Language 日本語版
- 本当はここから
メモ
#- 急に
@束縛出てきた- わからん
enum Message {
Hello { id: i32 },
}
let msg = Message::Hello { id: 5 };
match msg {
Message::Hello { id: id_variable @ 3..=7 } => {
// 範囲内のidが見つかりました: {}
println!("Found an id in range: {}", id_variable)
},
Message::Hello { id: 10..=12 } => {
// 別の範囲内のidが見つかりました
println!("Found an id in another range")
},
Message::Hello { id } => {
// それ以外のidが見つかりました
println!("Found some other id: {}", id)
},
}
- うおー記述わかんねー
@を使用することで、値を検査しつつ、1つのパターン内で変数に保存させてくれるのです
-
意味わかんねー
-
@ 3..=7- ここに
@を置くらしい
- ここに
-
おーなるほど
- ただ変数にいれるだけか
- 多分範囲指定してる値を参照できないんだろうな
-
さすがにしたから読むの無理だ
-
ブロックごとに読もう
let num = Some(4);
match num {
// 5未満です: {}
Some(x) if x < 5 => println!("less than five: {}", x),
Some(x) => println!("{}", x),
None => (),
}
-
うーん、この記述いいんだろうか
- マッチガード的な考え方としてはいいけど
- resultを評価したあとに書いたほうがよくないか
-
したから読んだら全くわからなくなった
-
|がorってなんかでやったな、忘れたが- バーティカルバーって呼ぶはず
-
..=ってなんだよ- と思ったが範囲指定か
let x = 'c';
match x {
// ASCII文字前半
'a'..='j' => println!("early ASCII letter"),
// ASCII文字後半
'k'..='z' => println!("late ASCII letter"),
// それ以外
_ => println!("something else"),
}
- a to zもいけるらしい
NO IMAGEパターン記法 - The Rust Programming Language 日本語版
- 分配して値を分解するってなんだ
- イメージがつかん
struct Point {
x: i32,
y: i32,
}
fn main() {
let p = Point { x: 0, y: 7 };
let Point { x: a, y: b } = p;
assert_eq!(0, a);
assert_eq!(7, b);
}
- マジで何書いてあるかわからん
struct Point {
x: i32,
y: i32,
}
fn main() {
let p = Point { x: 0, y: 7 };
let Point { x, y } = p;
assert_eq!(0, x);
assert_eq!(7, y);
}
- んーなるほど
- 構造体から値を取り出すための短縮的な書き方か
まとめ
#- 逆から読んだらありえないぐらいわけわからなかった
- 構造体の値を取り出す所まで来たなーという感じ