Closed yuk1ty closed 3 years ago
@yuk1ty やりたいです。アサインお願いします 🙏
2.8 Q2 はRustでの再現は難しいように思います。
似たようなフィルターとして、encoding/csv というパッケー ジがあります。 このパッケージを使って、標準出力やファイルに CSV データを出力してみましょ う。
(『Goならわかるシステムプログラミング』1版4刷 p.34 より引用)
encoding/csv
パッケージを使うことがこの問の主題となっているため再現が難しいです。
Rust で encoding/csv
相当の struct を作ることも検討しましたが:
章の性質上 std::io::Write
トレイトを実装し、 std::io::Write
と同じインターフェイスで使えるものにしなければ意義が薄いと考えました。
しかし std::io::Write
においては「CSVのカラム文字列を vec/slice/iterator... で 引数として取り、出力し、改行記号を勝手に出力する」という芸当ができません( write_vectored
を使えば似たことはできますが、利用者側に IoSlice
でCSVのカラム文字列を構成させるという謎の苦行を味わわせるものになります)。
もし上記同意頂ける場合、 2.8 Q2 は欠番であることをリポジトリ訪問者にわかってもらうために、 panic!("この問題無理!See: https://github.com/yuk1ty/learning-systems-programming-in-rust/issues/6#issuecomment-830365583")
のような動作のプログラムを作成するのはありだと思いますが、いかがでしょうか?
2, 3, 4 章は Go 特有の事情を説明する箇所が結構あり、対応が難しいところがありますね……
csv クレートを導入してしまうのはありかも、とは思いましたが、これを使用すると若干章の趣旨(std::io::Write ないし io.Writer を使ってみよう)から飛んじゃってますよね… https://crates.io/crates/csv
unimplemented
にして、飛ばした理由を書いておいていただく、で大丈夫です!
節タイトル
2.8 問題。
対象コード
補足説明
-