F # - Il tipo int non è compatibile con l'unità di tipo
Domanda
abbastanza nuovo per linguaggi funzionali, ma sto mantenendo il codice di qualcun altro con un sacco di F #. Qualcuno può offrire una certa comprensione di questo?
let mtvCap = Rendering.MTViewerCapture(mtViewer)
mtvCap.GetCapture()
mtvCap.ToWpfImage()
grid.Children.Add(mtvCap.ImageElement)
MTViewer.ImageViewer è di tipo System.Windows.Controls.Image, e la griglia è System.Windows.Controls.Grid.
Ancora una volta, l'errore è: Il tipo int non è compatibile con l'unità di tipo
Soluzione
F # non consente di ignorare silenziosamente valori di ritorno. Il tipo unit
è la versione di void
s 'F #. Quindi l'errore sta dicendo in sostanza
Mi aspettavo la dichiarazione di avere non ritorno, ma invece restituisce un valore int
o il contrario. Tendo a leggere in modo non corretto questo messaggio di errore.
Qual è probabile accada è uno dei seguenti
- Il metodo in questione si aspetta un valore di ritorno
int
ma il metodoAdd
ritorna vuoto da cui F # è solo chiedendo per un valore di ritorno - Il metodo in questione è tipizzata come
unit
maAdd
restituisce unint
e F # si ha bisogno di ignorare il valore. - I valori
GetCapture
o di ritornoToWpfImage
che devono essere gestiti in modo esplicito.
Per gli ultimi 2 casi è possibile risolvere il problema passando il valore alla funzione ignore
mtvCap.GetCapture() |> ignore
mtvCap.ToWpfImage() |> ignore
grid.Children.Add(mtvCap.ImageElement) |> ignore
Dopo aver scavato un po 'intorno Credo # 2 è il problema perché UIElementCollection.Add
restituisce un valore int
. Provate a modificare la riga finale per assomigliare a questo
grid.Children.Add(mtvCap.ImageElement) |> ignore
Altri suggerimenti
Lo so ben poco su F #, ma mi sembra di ricordare, "unità" è il loro modo di dire "vuoto", in modo da sto andando intuire che si sta tentando di assegnare il "valore di ritorno" di una funzione che doesn' t hanno uno, per un varaible. Ciò renderebbe il probabile candidato più, questa linea:
let mtvCap = Rendering.MTViewerCapture(mtViewer)