与受歧视的联盟相匹配

gjv*_*amp 3 enums f# pattern-matching discriminated-union

首次使用F#进行生产,需要一些帮助.请参阅此代码,我在每行添加了警告作为注释:

type AssetClass = 
    | Corp
    | Corp_SME
    | Res_Mort
    | Qual_Ret
    | Ret_Oth

let Correlation assetClass pd sales = 
    match assetClass with 
    | Corp -> 0.12 
    | CORP_SME -> 0.24 // warning FS0049: Uppercase variable identifiers
    | Res_Mort -> 0.15 // warning FS0026: This rule will never be matched
    | Qual_Ret -> 0.04 // warning FS0026: This rule will never be matched
    | Ret_Oth  -> 0.03 // warning FS0026: This rule will never be matched
Run Code Online (Sandbox Code Playgroud)

我检查了它并没有虚张声势,第三个和其他情况确实被忽略了.我没有到这里来的是什么?(我在实际实现中使用的pd和销售输入,我在这里省略了公式.)

我想要做的是使用区分联合,因为我将在C#中使用枚举,然后打开它.所以在C#中我会输入这个:

    enum AssetClass {
        Corp,
        Corp_SME,
        Ret_Oth
    }

    float Correlation(AssetClass assetClass){
        switch(assetClass){
            case Corp: return 0.12; 
            case Corp_SME: return 0.12;
            case Ret_Oth: return 0.12; 
        }
    }
Run Code Online (Sandbox Code Playgroud)

有人可以帮帮我吗?

提前致谢,

格特 - 扬

sep*_*p2k 6

您调用了构造函数,Corp_SME但尝试将其与CORP_SME(全部大写)匹配.由于这不是任何构造函数的名称,因此F#假设它是一个变量名(因此是关于大写变量名的警告),然后当然匹配之前未匹配的所有内容(因此后续警告).