gpt4 book ai didi

f# - 为什么返回 int 的函数被报告为 a' -> int 类型

转载 作者:行者123 更新时间:2023-12-02 08:38:20 25 4
gpt4 key购买 nike

我有以下代码,它报告错误。不过我不明白错误消息。

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com