假设您有这个联合:
type Thing =
| Eagle
| Elephant of int
您的代码中有一个Elephants列表,如
let l = [Elephant (1000); Elephant (1200)]
您想遍历
l
并打印出与每个Elephant
相关的数据。有没有一种方法可以不使用模式匹配?
最佳答案
在您的示例中,您说您有一个大象列表-在这种情况下是正确的-但l
的类型实际上是Thing
值的列表,因此它可以同时包含大象和老鹰。这就是为什么您需要使用模式匹配-处理所有可能的情况的原因。
如果您经常需要使用仅包含大象的列表,则可以定义一个单独的大象类型。就像是:
type ElephantInfo = { Size : int }
type Thing =
| Elephant of ElephantInfo
| Eagle
现在,您可以创建一个
list<ElephantInfo>
类型的列表,该列表可以只包含大象,因此不需要模式匹配:let l1 = [ {Size=1}; {Size=2} ]
for el in l1 do printfn "%d" el.Size
另一方面,如果您想混合大象和老鹰,则将创建
list<Thing>
,然后使用模式匹配:let l2 = [ Elephant {Size=1}; Eagle ]
关于f# - 模式匹配是获取与联合案例关联的数据的唯一方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30486984/