引き続きサンプルプログラムを写経して実行します。
fn main() { let penguin_data = "\ common name, length (cm) Little Penguin, 36 Yellow-eyed Penguin, 65 Fiordland Penguin, 76 Invalid, data "; let records = penguin_data.lines(); for (i, record) in records.enumerate() { if i == 0 || record.trim().len() == 0 { continue; } let fields: Vec<_> = record.split(',').map(|field| field.trim()).collect(); if cfg!(debug_assertions) { eprintln!("debug: {:?} -> {:?}", record, fields); } let name = fields[0]; if let Ok(length) = field[1].parse::<f32>() { println!("{}, {} cm", name, length); } } }
cargo run
を実行するとエラーが起きます。
rust用の拡張機能を入れるとVSCode上でも指摘してくれます。
今のところrustを捉える僕の心的イメージは「ベターJavaScript」です。 型アノテーションがつけられて、ES3の悪いパーツがなくてES5以降のよいパーツが揃っている印象を受けました。 記法もC言語ベースで共通点が多いです。
let Ok(length)
はよくわからない謎の機能です。
説明によると「パースに成功したときにlengthに値を入れる」そうです。
例外でもなく、goのように慣習(?)でもなく、独自のエラー処理の仕組みがありそうです。
利点があるのかどうかはまだわかりません。
噂に聞く「コンパイルを通すのがつらい」体験はできていません。 現在の「ベターJavaScript」という心的イメージは間違っていると予想できます。
学習の初期段階の心的イメージは間違っていてよいです。 仮の心的イメージを定義し、今後の学習で矛盾点がでてきたら定義を更新します。 最近は、心的イメージの更新を高頻度に行うことが、新しい技術を習得する秘訣だと思っています。 また、心的イメージには究極の形態はなく、どんなに技術を深く理解しても、学びが増えれば更新されるものだと考えています。 不確実性コーンみたいな物ですが、技術の習得には納期が存在しないので、無限に更新されていくイメージです。