F# 如何解决F中的错误类型返回#
我有一个以以下内容开头的函数:F# 如何解决F中的错误类型返回#,f#,F#,我有一个以以下内容开头的函数: type Coordinate = (int * int) type ColourList = byte list type Block = Coordinate * ColourList makeBlock(image:image) (coord:Coordinate) : Block = Block(coord,getColourList(image(coord))` CreateUnit (image:Image) : (Coordinate -
type Coordinate = (int * int)
type ColourList = byte list
type Block = Coordinate * ColourList
makeBlock(image:image) (coord:Coordinate) : Block =
Block(coord,getColourList(image(coord))`
CreateUnit (image:Image) : (Coordinate -> Block) =
fun coord -> makeBlock(image, coord)`
getcolorlist
正在图片坐标中获取RGB byteList。它的签名是
image:Image -> x:int * y:int -> byte list
我们知道image也是一种类型,我的问题是getcolorlist(image(coord))的返回类型是int*int->byte list
,这是一个不正确的表达式。有人能帮忙吗
感谢您的回答如果我理解您的问题,我想您要问的是如何定义CreateUnit返回的函数。这在一定程度上取决于如何从图像和坐标生成块。假设它是image的一个成员函数:
let CreateUnit image : (Coordinate->Block) =
fun (coordinate:Coordinate) -> image.makeBlock(coordinate)
这将为您提供一个绑定到图像的函数,该函数获取坐标并生成块:
let myImage = loadImage(filename)
let blockMaker = CreateUnit image
myCoordinates
|> Seq.map blockMaker
将坐标序列转换为从图像派生的块序列。我不太理解这个问题,但您的函数签名告诉我们:“CreateUnit是一个函数,它接受图像作为输入,并返回另一个函数,该函数接受坐标作为输入,并返回块”。所以稍后你可以做一些类似于
let block=CreateUnit image coordination
的事情,是的,那么如何创建这个函数是我的问题,我要做类似let Unit(??param):(block)
?我不知道应该输入什么样的内容。如何将另一个函数作为输出返回将getColorList(image(coord))
更改为getColorList image coord
时会发生什么?您编写的表达式试图将图像视为函数。我冒昧地改进了代码的格式。如果你有代码块,你不需要在它们周围加上反勾号;只需将它们缩进四个字符,它们就会正确显示格式。堆栈溢出编辑器框中有一个类似于{}
的方便按钮,可以为您执行此操作,因此您只需粘贴代码,高亮显示它,单击{}
按钮,即可完成此操作。(查看编辑框下方的预览,看看是否正确)。最终解决了,感谢Robert Sim在此处的评论,问题只是括号。。。