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

È stato utile?

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

  1. Il metodo in questione si aspetta un valore di ritorno int ma il metodo Add ritorna vuoto da cui F # è solo chiedendo per un valore di ritorno
  2. Il metodo in questione è tipizzata come unit ma Add restituisce un int e F # si ha bisogno di ignorare il valore.
  3. I valori GetCapture o di ritorno ToWpfImage 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)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top