模式鉴别器未定义

时间:2017-11-08 16:46:59

标签: f#

我是F#的新手,你能帮我解决这个错误:'模式鉴别器没有定义'

let findColorIndex colorArray, color =
    let mutable index=0
    for i in 0..colorArray.Length-1 do
                 if Color.FromName(colorArray.[i]).R.Equals(color.R) then 
                    if Color.FromName(colorArray.[i]).G.Equals(color.G) then 
                        if Color.FromName(colorArray.[i]).B.Equals(color.B)
                            then index<-i
    index

2 个答案:

答案 0 :(得分:2)

错误信息难以阅读。它是编译器不喜欢的初始逗号。你可能意味着

let findColorIndex colorArray color =

let findColorIndex (colorArray, color) =

答案 1 :(得分:0)

在风格上,您的代码看起来像是C#代码的直接翻译。它有效,但看起来不太好。我把它改写如下:

// A little helper function to get all color values at once
let getRGB (color : Color) = (color.R, color.G, color.B)

let findColorIndex colorArray color =
    let rec findIdx i =
        // If no matching color is found, return -1
        // Could use options instead...
        if i >= colorArray.Length then -1
        elif getRGB (Color.FromName colorArray.[i]) = getRGB color then i
        else findIdx (i + 1)
    findIdx 0

或者您可以使用Array.tryFindIndex

let findColorIndex colorArray color =
    // Returns None if no matching index is found,
    // otherwise Some index
    colorArray |> Array.tryFindIndex (fun c ->
        getRGB (Color.FromName c) = getRGB color)