## 事象 以下の[[クロージャ (Rust)|クロージャ]]の[[戻り値型]]が空[[タプル (Rust)|タプル]] (`()`) と推測されてしまう。 ```rust let expensive_closure = |num| { println!("calculating slowly..."); thread::sleep(Duration::from_secs(2)); num }; ``` 型を明示すれば問題ない。 ```rust let expensive_closure = |num| -> u32 { println!("calculating slowly..."); thread::sleep(Duration::from_secs(2)); num }; ``` バージョンは `0.4.182.4996-222`。`0.4.183.5026-222`にバージョンアップしても変化なし。 ## 原因 不具合ぽい。 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://github.githubassets.com/favicons/favicon.svg" /> <span class="link-card-v2-site-name">GitHub</span> </div> <div class="link-card-v2-title"> Wrong type inference for closure without explicit return type · Issue #8892 · intellij-rust/intellij-rust </div> <div class="link-card-v2-content"> Environment IntelliJ Rust plugin version: 0.4.171.4656-221 Rust toolchain version: 1.61.0 (fe5b13d68 2022-05-18) ... </div> <img class="link-card-v2-image" src="https://opengraph.githubassets.com/0ce6dd95093ff27fe5c3bf8285df7cc27c6b1936586ec504cc34db5aab3e1d96/intellij-rust/intellij-rust/issues/8892" /> <a href="https://github.com/intellij-rust/intellij-rust/issues/8892"></a> </div> ## 回避策 以下のように戻り型を`_`で明示する方法がある。 ```rust let expensive_closure = |num| -> _ { println!("calculating slowly..."); thread::sleep(Duration::from_secs(2)); num }; ```