与分解的区别联合组件和原始组合值绑定的名称

时间:2014-11-10 17:05:31

标签: f# discriminated-union

我找不到关于此的文档。我需要将Discriminated Union值分解为一些组件,但我也需要在函数体内将该项作为一个整体使用。

我可以let matcher = function MyDU(_,b,_) -> blet extractor MyDU(_,b,_) = b但如果我还需要{My}值的引用,例如... -> RedundantWrapper(myDU, b)

我试过了:

let extractor myDU = 
    let MyDU(_,b,_) = myDU
    RedundantWrapper(myDU, b)

但我不认为这是正确的语法。也许我可以用更长的时间做这件事,但似乎会有一个短暂的方式。

谢谢!

2 个答案:

答案 0 :(得分:3)

像这样:

let (Some(x) as o) = Some 1

// val o : int option = Some 1
// val x : int = 1

答案 1 :(得分:0)

另外,我刚才意识到这个简短的手是允许的,我认为这里的每个人都会同意这是非常棒的。

let extractor (myDU & MyDU(_,b,_)) = 
    RedundantWrapper(myDU, b)