功能性语言非常陌生,但我正在维护其他人的代码,其中有很多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值

或相反。我倾向于错误地读取此错误消息。

可能发生的是以下

  1. 所讨论的方法是期望 int 返回值但方法 Add 返回void,因此f#只是要求返回值
  2. 所讨论的方法键入 unitAdd 正在返回 int F#需要您忽略该值。
  3. 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)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top