意外と伸びたダウンロード数
onigiriのcrates.ioへの登録は、当初、crates.ioの使い方の勉強と個人で使う予定で公開しました。しかしこの素人感満載のライブラリ、役立っているのかは定かではありませんが、ダウンロード数が予想以上に(予想は10ぐらい)伸びて、300近くダウンロードされるようになりました。なんだか嬉しい。プラスちょっとした責任感が出てきました。GitHubの扱いも微妙な私ですか、ちょっとずつ勉強して良い状態に持って行きたいと思います。
さて、今回追加しました機能
search_all
ですが、これまた前回に続き、必要な機能かどうか、便利な機能なのかどうなのか、というところですが、いろんな機能を持っていたほうがいいかなという素人考えです。使い方の例は以下のようなものになります。
let text = "+ ++ +++ ++++ +".to_string();
let new_vvc = tools::Vvc::new(&test_text);
let search_result = new_vvc.clone().search_all("+".to_string());
assert_eq!(search_result, Some(vec![0, 4]));
つまり、探したい文字列の位置を示してくれます。位置が分かれば、&new_vvc.attr[0]
などと使うことができます。さらにchars_to_string
でそれを文字列に変換することも可能ですし、数値ならcast
で型を指定して変換可能です。なぜcharのVecなのか?
例えば
"(-23 + +34)"
という文字列を["(", "-23", "+", "+34", ")"]
という形に分けたい場合、どうしますか?例えば、文字列をcharに分解するには
chars()
。それをcollect()
すれば、Vec<char>
で['(', '-', '2', '3', ' ', '+', ' ', '+', '3', '4']
となります。文字列をbyteにするにはas_bytes()
ですが数値は直感的でない。空白ごとに分けるにはsplit_whitespace()
ですが、"(-23"
という文字列が生成され、再び何かしら処理しなければならない。そしてクロージャなどを駆使できるほどまだ私の勉強は進んでない。そこで、Rustのコミュニティのチャットで相談したところ、Parserを使わなくてはいけないという助言をいただきました。そこでいろいろ探して回りましたが、どれもりっぱ過ぎて、こころの中で「そんなに大げさじゃなくていいんだが」と思っていました。もっと単純でわかりやすい形で使いたい。要はchar型から二桁以上の数値を生成できれば何とかなりそうと思い、考えついたのがこのライブラリです。しかし本当に皆様の役に立っているのかは定かではない。もうちょっと勉強しよう。
そして密かな野望、外国のプログラマーに「おにぎり」と言わせてみたい。発音はどうなるのだろうか?「オンニギライ」?「オンニガイライ」?