题
功能性语言非常陌生,但我正在维护其他人的代码,其中有很多f#。谁能对此有所了解?
let mtvCap = Rendering.MTViewerCapture(mtViewer)
mtvCap.GetCapture()
mtvCap.ToWpfImage()
grid.Children.Add(mtvCap.ImageElement)
mtviewer.imageviewer是类型system.windows.controls.image,and grid is system.windows.controls.grid。
同样,错误是:类型INT与类型单元不兼容
解决方案
F#不允许您默默忽略返回值。方式 unit
是F#的版本 void
. 。所以错误是从本质上说
我希望该声明没有回报,但是它返回了int值
或相反。我倾向于错误地读取此错误消息。
可能发生的是以下
- 所讨论的方法是期望
int
返回值但方法Add
返回void,因此f#只是要求返回值 - 所讨论的方法键入
unit
但Add
正在返回int
F#需要您忽略该值。 - 这
GetCapture
或者ToWpfImage
需要明确处理的返回值。
在最近的两种情况下,您可以通过将值传递给 ignore
功能
mtvCap.GetCapture() |> ignore
mtvCap.ToWpfImage() |> ignore
grid.Children.Add(mtvCap.ImageElement) |> ignore
挖掘后,我相信#2是问题,因为 UIElementCollection.Add
返回 int
价值。尝试修改最后一行,看起来像这样
grid.Children.Add(mtvCap.ImageElement) |> ignore
其他提示
我对f#的了解一无所知,但是我记得,“单位”是他们说“ void”的方式,所以我猜想您正在尝试分配一个函数的“返回值” ,变化。这将成为最有可能的候选人,这是:
let mtvCap = Rendering.MTViewerCapture(mtViewer)
不隶属于 StackOverflow