Question

Tout à fait nouveau pour les langages fonctionnels, mais je suis maintenant le code de quelqu'un d'autre avec beaucoup de F #. Offre Quelqu'un peut-il une idée de ce sujet?

        let mtvCap = Rendering.MTViewerCapture(mtViewer)
        mtvCap.GetCapture()
        mtvCap.ToWpfImage()
        grid.Children.Add(mtvCap.ImageElement)

MTViewer.ImageViewer est de type System.Windows.Controls.Image, et la grille est System.Windows.Controls.Grid.

Encore une fois, l'erreur est: Le type int est pas compatible avec l'unité de type

Était-ce utile?

La solution

F # ne permet pas pour vous d'ignorer silencieusement les valeurs de retour. Le type unit est une version de F # de void. Donc, l'erreur est de dire essentiellement

  

Je me attendais à la déclaration d'avoir pas de retour mais il renvoie une valeur int

Ou le contraire. J'ai tendance à lire correctement ce message d'erreur.

Qu'en est-il probable est une des façons suivantes

  1. La méthode en question attend une valeur de retour de int, mais le retour de la méthode Add vide donc F # est juste demander pour une valeur de retour
  2. La méthode en question est typé unit mais Add retourne un int et F # a besoin de vous d'ignorer la valeur.
  3. Les valeurs GetCapture ou le retour de ToWpfImage qui doivent être explicitement traité.

Pour les 2 derniers cas, vous pouvez corriger cela en passant la valeur à la fonction ignore

mtvCap.GetCapture() |> ignore
mtvCap.ToWpfImage() |> ignore
grid.Children.Add(mtvCap.ImageElement) |> ignore

Après avoir creusé autour d'un peu je crois # 2 est la question, car UIElementCollection.Add renvoie une valeur int. Essayez de modifier la dernière ligne pour ressembler à ceci

grid.Children.Add(mtvCap.ImageElement) |> ignore

Autres conseils

Je sais remarquablement peu F #, mais je me souviens bien, « unité » est leur façon de dire « vide », donc je vais deviner que vous essayez d'attribuer la « valeur de retour » d'une fonction qui n » t ont une, à un varaible. Cela rendrait le plus probable candidat, cette ligne:

let mtvCap = Rendering.MTViewerCapture(mtViewer)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top