将列表管道放入F#中的行

时间:2010-02-25 09:16:22

标签: f# pipeline forward

现在我可以将单个value or tubles添加到管道中,我的下一个问题是我可以添加列表/数组:

filesUnderFolder
|> Seq.map FileInfo  

我的问题是我无法用管道处理这个|>,或者我可以吗?

Assembly.GetExecutingAssembly.GetFiles()
|>Array.map (fun file -> file.ReadAllText().Contains(keyword))

2 个答案:

答案 0 :(得分:3)

我不明白你的问题是什么,但正确的版本是:

open System.Reflection
open System.IO

Assembly.GetExecutingAssembly().GetFiles() 
|> Seq.map (fun file -> new StreamReader(file)) 
|> Seq.map (fun file -> file.ReadToEnd().Contains(keyword)) 
|> Seq.iter(printfn "%s")

首先,你需要GetExecutingAssembly,你需要它的结果。所以()。 第二个GetFiles(),返回Stream数组,而不是FileInfo,如您所料。因此,您必须将Stream包裹到StreamWriter

多数民众赞成。

答案 1 :(得分:2)

看看你的评论,你试图这样做吗?

Assembly.GetExecutingAssembly().GetFiles() 
|> Seq.map (fun file -> 
    let stream = new StreamReader(file)
    file, stream.ReadToEnd().Contains(keyword))
|> Seq.filter snd
|> Seq.map fst
|> Seq.iter (fun file -> printfn "%s" file.Name)

势在必行的风格可以更清洁。

for file in Assembly.GetExecutingAssembly().GetFiles() do
    let stream = new StreamReader(file)
    if stream.ReadToEnd().Contains(keyword) then
        printfn "%s" file.Name
相关问题