【发布时间】:2019-07-06 02:23:46
【问题描述】:
我有以下 f# 代码
product.code <- productPage.Html
.Descendants["li"]
.Select(fun node -> node.InnerText())
.Where(fun link -> (Regex.Match(link,@"code:").Success))
.FirstOrDefault()
.Replace("code:", "")
.Trim()
我在处理空值时遇到了一些问题。 在 c# 中我会做这样的事情。
product.code = productPage?.Html
?.Descendants["li"]
?.Select(node => node.InnerText())
?.Where(link => Regex.Match(link,@"code:").Success)
?.FirstOrDefault()
?.Replace("code:", "")
?.Trim() ?? "Not Found"
这可能吗?
【问题讨论】:
-
在 F# 中,
productPage本身应该是Option<Page>或任何类型,而不是null。选项has members Option.map,option.iter。你用的是哪个库?它是否返回空值或选项?也许有一个 F# 包装器或替代品? -
类似于 F# 数据包中的 HtmlParser?
-
@Spaceman 也许,也许不是。你检查过 HtmlParser 吗?答案是首先避免空值。你用的是哪个库?您可以使用例如
productPage.Html |> Option.map page->...而不是检查空值
标签: f#