F # - Le type int est pas compatible avec l'unité de type
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
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
- La méthode en question attend une valeur de retour de
int
, mais le retour de la méthodeAdd
vide donc F # est juste demander pour une valeur de retour - La méthode en question est typé
unit
maisAdd
retourne unint
et F # a besoin de vous d'ignorer la valeur. - Les valeurs
GetCapture
ou le retour deToWpfImage
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)