TAKOYAKING’s blog 一覧

TAKOYAKING’s blog

たこ焼き系

Rust: ターボフィッシュ コロンコロン::<>

意味

型を具体的に明示するときに使用します。
呼び方はターボフィッシュ(turbofish)。

左辺に型を書くのか、それともターボフィッシュで書くのが良いか?

左辺に型を書くべきかそれともターボフィッシュを使うのかどちらが良いか?


Type Annotation in Binding vs Turbofish · Issue #90 · rust-dev-tools/fmt-rfcs · GitHub

let query_result = users.load::<User>(&db_connection);
// VS
let users_result: QueryResult<Vec<User>> = user.load(&db_connection);

上と下では上の方が修正しやすいので個人的には良い

確かに、下の例だと全部型を書かないといけないので面倒です。

他の意見では

場合による。collectを使う場合は左辺に明示するのが好み。

もあり、確かに左辺に書いた方が便利な時もあるみたいです。

なぜ必要か

Rustのturbofishを理解する | κeenのHappy Hacκing Blog
ここに書いてありました。
記法がかぶるかららしいです。
小なりと大なりの記法と区別がつかない時があるみたいです。

びっくりした記法

Rustのturbofishを理解する | κeenのHappy Hacκing Blog

let v = Vec::<u32>::new();

ここの例から用いると、vecの初期化で使用するときはこのような記法になりますが、最初これを使用する場面に出会したときに、コロンがいっぱいすぎて、コードを書いていて、正しい記法なのか不安になりました。

感想

ターボフィッシュってなんか響きが良い!