我是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
答案 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)