hiro99ma blog
(書きかけ)

型変換

はじめに

Rust は型チェックが厳しいので、しばしば型変換が必要になる。

おおよその名前ルール

標準ライブラリには名前のルールがある。
それ以外でもこのルールに従っていると考えた方がよいだろう。

as_

borrowed -> borrowed でコストも低い。

to_

3パターンある。

borrowed -> borrowed

borrowed -> borrowed で as_ に比べるとコストが高い。
データのチェックをして大丈夫だったらキャストする場合など(例: OsStr::to_str(&self) -> Option<&str>)。

borrowed -> owned (non-Copy types)

変換先のメモリを作って borrowed のデータをコピーするなり変換するなり。
元が borrowed なので non-Copy の意味は気にしなくてよいと思う。

owned -> owned (Copy types)

変換元が Copy トレイトを持っているので所有権を奪われないが、 その分コピーするコストが発生するということだろう。
borrowed -> owned と同じくらいのコストがかかるのかもしれないが、 Copy トレイトによる複製が行われてから変換するのと、 値を変換しながらとでは後者の方がコストが低いように思う。 もし Copy トレイトの処理が必ず行われるならプリミティブ型のように 複製のコストが低い型にしかないかもしれない。

into_

owned -> owned (non-Copy types) で、元の所有権を奪うことになる。
その分、元のデータを使い回すことでコストが低くできるのかもしれない。
呼び出し元で所有権を奪われないための処理をするかどうかの選択ができると考えれば良いか。

to_ は型変換以外でも英語的な意味(degree から radian に変換、など)で使うかもしれないが、 into_ はなんとなく型変換のみで使った方がよさそうな気がする(個人の感想)。

参照

writer: hiro99ma
tags: Rust言語


 
About me
About me
comment
Comment Form
🏠
Top page
GitHub
GitHub
Twitter
X/Twitter
My page
Homepage