引き続き自転車本を読んでいく
3章までは、プロジェクトベースでRustの機能をみていくみたいなやつで、一度はやったこともあったので一旦飛ばした。でもこういう感じで端的に何ができるか、ある機能を実現するためにはどうすればいいかを先に例示しておく形式いいと思う。言語機能ただ学んでもふーんとなってしまうが、先にどう使うのかを何となく知っておくと興味の持ち方が違うんじゃないだろうか。
ひとまず第4章 プリミティブ型から読んでいく。せっかくなのでevcxr_jupyter
でコードを写経していく。
Rustでは組み込み型をプリミティブ型、ユーザによって定義される型はユーザ定義型と呼ぶらしい。プリミティブ型の中にはスカラ型と複合型がある。ユーザ定義型には複合型しかない。ここのあたりは他の言語とも共通?
()
というやつ。これ、みたことある。
fn main() -> Result<(), Box<dyn std::error::Error>> {
}
の中にあるResult<()>
はどうやらユニット型だったらしい。空の返り値はNoneじゃなくて()
というわけだ。サイズは0バイトらしい。
ブール型というやつだ。なんのひねりもない。and演算は&&
, or演算は||
。
i{8, 16, 32, 64, 128}が符号付き整数、u{8, 16, 32, 64, 128}が符号なし整数。
面白いのがsuffixで型を指定できる点。確かに今までもあったね
data = [
0u32, 1, 1, 1
]
みたいなやつ。他にisize
, usize
というのがあるらしい。32bitマシンだとi32、64bitマシンだとi64になるらしい。他に気になったのはb''
でASCIIコードを出せるらしい(Pythonでいうところのord
)。つまり、polarsのCsvReaderで使った
CsvReader::new(file)
.infer_schema(None)
.has_header(false)
.with_delimiter(b',')
.finish()