这是我在F# List of Union Types上的问题的延续。多亏了有用的反馈,我能够创建一个Reports 列表,其中Report之一是Detail或Summary。这是数据定义再次:
module Data
type Section = { Header: string;
Lines: string list;
Total: string }
type Detail = { State: string;
Divisions: string list;
Sections: Section list }
type Summary = { State: string;
Office: string;
Sections: Section list }
type Report = Detail of Detail | Summary of Summary
现在我已经Report在一个名为 的变量中获得了 s的列表reports,我想遍历这些Report对象并基于每个对象执行操作。除了处理Detail.Divisions或的情况外,操作是相同的Summary.Office。显然,我必须以不同的方式处理这些问题。但我不想复制所有代码来处理每个类似的State代码Sections。
我的第一个(工作)想法类似于以下内容:
for report in reports do
let mutable isDetail = false
let mutable isSummary = false
match report with
| Detail _ -> isDetail <- true
| Summary _ -> isSummary <- true
...
这将给我一种方法来知道何时处理Detail.Divisions而不是Summary.Office. 但这并没有给我一个可以使用的对象。我仍然坚持report,不知道它是什么,Detail或者Summary,也无法访问属性。我想转换report为适当的DetailorSummary然后使用相同的代码来处理任何一种情况,除了Detail.Divisionsand Summary.Office。有没有办法做到这一点?
谢谢。