功能语言相当新,但我用很多F#维护别人的代码。任何人都可以对此有所了解吗?
let mtvCap = Rendering.MTViewerCapture(mtViewer)
mtvCap.GetCapture()
mtvCap.ToWpfImage()
grid.Children.Add(mtvCap.ImageElement)
MTViewer.ImageViewer的类型为System.Windows.Controls.Image,网格为System.Windows.Controls.Grid。
同样,错误是:int类型与类型单元
不兼容答案 0 :(得分:14)
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
答案 1 :(得分:1)
我对F#知之甚少,但我记得,“单位”是他们说“无效”的方式,所以我猜你要试图分配一个函数的“返回值”有一个,到一个可变的。这将成为最有可能的候选人,这一行:
let mtvCap = Rendering.MTViewerCapture(mtViewer)