私は Rust を学んでおり、クロージャーを試すための簡単なコードを実装しましたが、解決方法がわからないというボローチェッカーの問題に直面しています。
次の関数をコンパイルする場合
fn twice(x:int, f:|int| -> int) -> int {
f(f(x))
}
次のエラーが表示されます
closure requires unique access to `f` but it is already borrowed
私はガイドに取り組んでおり、借用チェッカーがこれを好まない理由をある程度理解していますが、それを解決する方法がわかりません。
最初の呼び出しの結果を最初に一時変数に割り当ててから、f(..)
これを再度呼び出すことで回避できます。しかし、これはエレガントではありません。
よりクリーンな/より良い書き方f(f(x))
、またはこれが安全であることをコンパイラに納得させる方法はありますか?