F # - Der Typ int ist nicht kompatibel mit Typ-Einheit
Frage
Ganz neu in funktionalen Sprachen, aber ich bin Aufrechterhaltung von jemandem anderen Code mit vielen F #. Kann jemand bieten einige Einblicke in das?
let mtvCap = Rendering.MTViewerCapture(mtViewer)
mtvCap.GetCapture()
mtvCap.ToWpfImage()
grid.Children.Add(mtvCap.ImageElement)
MTViewer.ImageViewer ist vom Typ System.Windows.Controls.Image und Gitter sind System.Windows.Controls.Grid.
Wieder Fehler ist: Der Typ int ist nicht kompatibel mit Typ-Einheit
Lösung
F # erlaubt es nicht, für Sie lautlos zu Rückgabewerte zu ignorieren. Der Typ unit
ist F # 's Version von void
. So wird der Fehler sagt im Wesentlichen
erwartete ich die Aussage keine Rückkehr zu haben, sondern es gibt einen int-Wert
Oder das Gegenteil. Ich neige dazu, falsch diese Fehlermeldung zu lesen.
Was ist wahrscheinlich passiert ist eine der folgenden
- Das fragliche Verfahren rechnet mit einem
int
Rückgabewert, sondern die MethodeAdd
void zurückzugibt daher Fis nur für einen Rückgabewert zu fragen - Das betreffende Verfahren wird als
unit
getippt aberAdd
kehrt einint
und F # braucht Sie den Wert zu ignorieren. - Die
GetCapture
oderToWpfImage
Rückgabewerte die Notwendigkeit explizit behandelt werden.
Für die letzten zwei Fällen Sie können dieses Problem beheben, indem Sie den Wert auf die ignore
Funktion übergeben
mtvCap.GetCapture() |> ignore
mtvCap.ToWpfImage() |> ignore
grid.Children.Add(mtvCap.ImageElement) |> ignore
Nach etwa graben ein bisschen I # 2 glaube, ist die Frage, weil UIElementCollection.Add
einen int
Wert zurückgibt. Versuchen Sie, die letzte Zeile modifiziert wie diese
grid.Children.Add(mtvCap.ImageElement) |> ignore
Andere Tipps
Ich weiß erstaunlich wenig über F #, aber wie ich mich erinnere, „Einheit“ ist ihre Art „Leere“ zu sagen, so wird ich denke, dass Sie versuchen, den „Rückgabewert“ eine Funktion, dass doesn‘zuweisen t haben eine, zu einem varaible. Das wäre der wahrscheinlichste Kandidat machen, diese Zeile:
let mtvCap = Rendering.MTViewerCapture(mtViewer)