[過去ログ] Rust part24 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
847(1): デフォルトの名無しさん [] 2024/07/14(日) 09:23:36.10 ID:JssLuzWj(1/4) AAS
fold って next とどうちがうん
853: デフォルトの名無しさん [sage] 2024/07/14(日) 12:47:51.97 ID:JssLuzWj(2/4) AAS
>>822tokio 自体は難しくないけど
cargo test と組み合わせると難しくなる罠
854(1): デフォルトの名無しさん [] 2024/07/14(日) 12:50:40.22 ID:JssLuzWj(3/4) AAS
>>848848(1): デフォルトの名無しさん [] 2024/07/14(日) 10:13:20.02 ID:aq5pPuoi(1) AAS
>>847
nextはイテレーターを一つ進めるもの、foldやreduceはイテレーターに対して畳み込みを行うもの
例えば「配列内の全ての数値を足し合わせる」とか「全ての数値を掛け算する」「配列内の文字列を全て連結する」いった操作を行うものだよ
この類のものは他の言語でも使われるし、簡潔なコードを書けるようになるから知っておくと良いよ
配列等のコンテナに対して一般に map, filter, reduce と呼ばれる操作があって、そのうちreduceは「要素を畳み込んで1つの値にする」もの
畳み込む方法を関数で渡すもので、概念的には [1, 2, 3].reduce(add) や [1, 2, 3].reduce(multiply) のような形になる
渡す関数は関数のほかクロージャ (言語によってはラムダ式とも) も使える
こんな感じに抽象化するとfor文を使わなくて済むし、何をやってるかが明確になる
map も reduce も filter も知ってるけど(pythonとかから)
fold は知らんかった?楠
855(1): デフォルトの名無しさん [sage] 2024/07/14(日) 12:54:55.73 ID:JssLuzWj(4/4) AAS
>>850850(1): デフォルトの名無しさん [sage] 2024/07/14(日) 10:33:24.33 ID:iqWqiKXK(6/10) AAS
そして万能型のfoldを呼び出す形で
このような特定の型の構造に依存しない抽象的なコードが
trait Iteratorに用意されているため使えます
fn reduce<F>(mut self, f: F) -> Option<Self::Item>
where
Self: Sized,
F: FnMut(Self::Item, Self::Item) -> Self::Item,
{
let first = self.next()?;
Some(self.fold(first, f))
}
python の reduce は初期値を [0] にするのも任意に設定するのも
同じ reduce という名前でいけるのが
Rust だと reduce と fold で使い分ける必要があるということね
Rust が面倒だと言うことは理解した
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.044s