bu modeli kaplamak için bir kütüphane işlevi olup olmadığını soruya cevap vermek için - bir işlev bunun için tam olarak yoktur, ancak bazı devlet Seq.unfold
denilen sizi diziyi oluşturmak için olanak sağlayan bir işlevi yoktur . Böyle yukarıda işlevleri gerçekleştirmek için kullanabilir:
new StreamReader(filePath) |> Seq.unfold (fun sr ->
match sr.ReadLine() with
| null -> sr.Dispose(); None
| str -> Some(str, sr))
sr
değer akışı okuyucusu temsil eder ve durumuna geçirilir. Boş olmayan değerler sağladığınız sürece, oluşturulacak bir öğe ve durum (istediğiniz takdirde değişebilir) içeren Some
'u döndürebilirsiniz. null
okunduğunda, diziyi sonlandırmak için None
'u iade ederiz. Bu bir doğrudan eşdeğer değildir, çünkü bir istisna atıldığında StreamReader
düzgün şekilde atmaz.
Bu durumda, kesinlikle sıralama ifadesini (çoğu durumda daha zarif ve okunabilir) kullanırdım, ancak daha yüksek sıralı bir işlev kullanılarak yazılabileceğini bilmek de yararlı olur. .NET 2/3 günü
Teşekkür! Btw, bunun için bir kütüphane işlevi var mı? –
@David - Kesinlikle olmalı. .NET kitaplıklarının yavaş yavaş daha IEnumerable arabirimlere doğru ilerlediğine inanıyorum. – ChaosPandion
Başka bir işlem tarafından önceden açılmış bir dosyayı okumam gerekiyordu, bu yüzden aşağıdaki gibi değiştirdim: fs = new FileStream (filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); sr = new StreamReader (fs) 'işlevini kullanın – User