我有以下代码,报告错误。我不理解错误消息。
module MonochromeHandler
open System.Drawing
let private transparent = Color.FromArgb(0, 0, 0, 0)
let private calculateAlpha currentAlpha greyValue =
match currentAlpha - greyValue with
| value when value < 0 -> 0
| value -> value
let private actionPixel(pixelColour:Color) =
match (pixelColour.A, pixelColour.R, pixelColour.G, pixelColour.B) with
| (0uy, _, _, _) -> transparent
| (alpha, red, green, blue) when red = blue && red = green && red <> 255uy ->
let newAlpha = calculateAlpha((int)alpha, (int)red)
Color.FromArgb(newAlpha, 0, 0, 0)
| _ -> pixelColour
我在“
Color.FromArgb(newAlpha, 0, 0, 0)
”行出现错误Error 1 This expression was expected to have type
int
but here has type
'a -> int
该函数接受两个参数,我正在提供这些参数并返回一个int值。那么为什么newAlpha的类型不是“
int
”,为什么它是“'a -> int
”?可能与此相关,因为我声明了
calculateAlpha
而不带括号或参数的逗号,所以我对F#的理解(显然不足)是,我应该可以这样使用它:let newAlpha = calculateAlpha (int)alpha (int)red
如果执行此操作,则
calculateAlpha (int)alpha
部分会收到另一个错误:Error 1 This value is not a function and cannot be applied
为什么不能以这种方式调用该函数?
最佳答案
我想你是说
calculateAlpha (int alpha) (int red)
使用您的原始括号,此行将使用1个参数调用calculateAlpha,并且该参数为2元组:
let newAlpha = calculateAlpha((int)alpha, (int)red)
请参阅F# Functions的文档,特别是部分参数的应用。您将看到如何无意中创建了
newAlpha
函数!关于f# - 为什么返回int的函数被报告为a'-> int类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19038005/