プロジェクトからいくつかのアンラップ関数を削除しようとしていますが、このブロックの慣用バージョンが何であるかわかりません::オプションと結果からアンラップコールを削除します。
let free_block = match util::find_free_block(size) {
Some(block) => unsafe { (*block).split(size) },
None => unsafe { (*util::request_mem(size).unwrap()).split(size) }
};
None
の一致の場合、二重にインデントされた一致ステートメントはありません。
util::request_mem(size)
はResult<*mut T, i32>
を返し、失敗した場合はi32
の値を返します。
逆参照と生ポインタのメソッドを呼び出すための矢印演算子のCのような同等物がないことを理解していますが、私のコードのいくつかはひどく見えますが、なぜそれが言語に含まれないのか。
我々は本当に(http://stackoverflow.com/help/mcve)[MCVE]のような、それは答えがあることを保証するため、適切な、野生の推測ではなく。特にここでは、 'util :: request_mem'の署名が何であるかは不明です。あなたのコメントから、 'Option'のようなものが返ってくるようですが、私はあまりよく分かりません。また、 'unwrap'を避けたいということを知ってうれしいのですが、' request_mem'が 'None'を返す場合に何が起こるべきかを指定していません。 –
さらに、コード*を「二重にインデントされたmatch文」で記述した場合、それはあなたがしたいことを示す方法になります。 – Shepmaster