我试图弄清楚如何从 F# 中的单个函数管理多个惰性序列。
例如,在下面的代码中,我试图获取两个序列 - 一个返回目录中的所有文件,另一个返回无法访问(例如由于权限)的任何目录的元组序列例外。
当下面的代码编译并运行时,errorSeq 在被其他代码使用时从来没有任何元素,即使我知道发生了 UnauthorizedAccess 异常。
我正在使用 F# 2.0。
#light
open System.IO
open System
let rec allFiles errorSeq dir =
Seq.append
(try
dir |> Directory.GetFiles
with
e -> Seq.append errorSeq [|(dir, e)|]
|> ignore
[||]
)
(try
dir
|> Directory.GetDirectories
|> Seq.map (allFiles errorSeq)
|> Seq.concat
with
e -> Seq.append errorSeq [|(dir, e)|]
|> ignore
Seq.empty
)
[<EntryPoint>]
let main args =
printfn "Arguments passed to function : %A" args
let errorSeq = Seq.empty
allFiles errorSeq args.[0]
|> Seq.filter (fun x -> (Path.GetExtension x).ToLowerInvariant() = ".jpg")
|> Seq.iter Console.WriteLine
errorSeq
|> Seq.iter (fun x ->
Console.WriteLine("Error")
x)
0