簡略化した例から、次の動作についてのレッスンを描画しようとしています。
let groupedEnum (input: 'a seq) =
using (input.GetEnumerator()) (fun en ->
Seq.unfold(fun _ ->
if en.MoveNext() then
Some(en.Current, ())
else None) ()
)
//WORKS
let c = groupedEnum ("11111122334569999" |> List.ofSeq ) |> List.ofSeq
//BOOM !! System.NullReferenceException
let c = groupedEnum ("11111122334569999" ) |> List.ofSeq
列挙子「en」は、キャプチャされることとは関係なく破棄されますか?(私はそうだと思いますが、リソースに関するこのmsdnドキュメントの横にこの動作について読むべき何か/資料があります)
シーケンスが最初にリストに変換された場合、なぜそれが機能するのですか?
編集:これは、行動を説明するための単なるおもちゃの例であり、従うべきではありません。列挙子を直接操作する正当な理由はほとんどありません。