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

War es hilfreich?

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

  1. Das fragliche Verfahren rechnet mit einem int Rückgabewert, sondern die Methode Add void zurückzugibt daher Fis nur für einen Rückgabewert zu fragen
  2. Das betreffende Verfahren wird als unit getippt aber Add kehrt ein int und F # braucht Sie den Wert zu ignorieren.
  3. Die GetCapture oder ToWpfImage 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

aussehen
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)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top