[過去ログ] Rust part24 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
534
(3): 2024/07/01(月)12:59 ID:irzLgX5l(1) AAS
>>525
こう書くとresultがErrの時に返せずここでpanicになってしまう

 let val = result.unwrap();
 f(val)

そのためpanicしてもいいとか絶対にErrとならない特殊な場合を除けば
unwrapを用いてはダメでmapを使ってこのように書くんだよ

 result.map(|val| f(val))

ここで本当に関数fを呼ぶだけならresult.map(f)と簡略化できるけど
f(val)の部分は式やブロックの可能性もあるので簡略化せずに進めるね
省12
537: 2024/07/01(月)14:11 ID:JlB5uk0q(2/3) AAS
>>534
>ちなみにf(val)もResultを返すときは
の条件なら
>つまり以下の二つは同等
> result.map(|val| f(val)) // Resultを還さないf
> result.and_then(|val| f(val)) // Resultを還すf
じゃないんですかね(Ok(f(val))は蛇足)
538
(1): 2024/07/01(月)14:22 ID:seu0xN2c(1/2) AAS
Resultを返すか返さないか関係なくこれは常に成り立つね

>>534
> 以下の二つは同等
> result.map(|val| f(val))
> result.and_then(|val| Ok(f(val)))

例えばf(val)がOptionを返したとしても成立するよ
567: 2024/07/02(火)18:32 ID:0AnHLV8o(1/2) AAS
>>559
Rustでそれらは全てmatchになるので置き換えて比較すれば理解は簡単
ちなみにmatchにすると記述が長くなるが同レベルで「?」オペレータ適用できるメリットがある

result.and_then(|val| f(val))
これはこう置き換えられる
match result {
 Ok(val) => f(val),
 Err(err) => Err(err),
}

result.map(|val| f(val))
省10
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.038s