如何在F#中返回“None”?

3

它只返回一些“”,但我需要返回“none”。

我该怎么做?

let cat(filenames: string list) : string option =
    try
        let b = filenames |> List.map (fun x -> (defaultArg (concat(x)) ""))
        Some (String.concat "" b)
    with  _ -> None

你能添加更多的上下文吗?当出现问题时,你编写的代码似乎会返回“None”,但不清楚可能出现什么问题。 “concat”的定义是什么? - Gus
模块readNWritelet concat(filename: string) : string option = try let a = System.IO.File.ReadAllText filename Some a with _ -> Nonelet cat(filenames: string list) : string option = try let b = filenames |> List.map (fun x -> (defaultArg (concat(x)) "")) Some (String.concat "" b) with _ -> None - YoungT
concat是从之前的代码中定义的。 - YoungT
1个回答

4
它返回some "",因为空列表不会引发异常。您需要匹配空列表并返回None。我也不确定List.map是否与您在此处尝试进行的连接相匹配,也许您想使用List.reduce?像这样做可能会有用。
let cat filenames = 
   match filenames with
   | [] -> None
   | l -> l |> List.reduce (+) |> Some

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接