F# - тип int не совместим с типом unit
совершенно новый для функциональных языков, но я поддерживаю чужой код с большим количеством F#. Может ли кто-нибудь дать некоторое представление об этом?
let mtvCap = Rendering.MTViewerCapture(mtViewer)
mtvCap.GetCapture()
mtvCap.ToWpfImage()
grid.Children.Add(mtvCap.ImageElement)
MTViewer.ImageViewer имеет тип System.Окна.Контроли.Изображение и сетка-это система.Окна.Контроли.Сетка.
опять же, ошибка: тип int несовместим с типом unit
2 ответов
F# не позволяет вам молча игнорировать возвращаемые значения. Тип unit
является версией F#void
. Таким образом, ошибка говорит по существу
я ожидал, что оператор не будет иметь возврата, но вместо этого он возвращает значение int
или наоборот. Я склонен неправильно читать это сообщение об ошибке.
то, что, вероятно, происходит, является одним из следующих
- рассматриваемый метод ожидает
int
возвращаемое значение, но методAdd
возвращает void, следовательно, F# просто запрашивает возвращаемое значение - рассматриваемый метод набирается как
unit
ноAdd
возвращаетint
и F# нужно игнорировать значение. - на
GetCapture
илиToWpfImage
возвращаемые значения, которые должны быть четко отрегулированы.
для последних 2 случаев вы можете исправить это, передав значение в ignore
функции
mtvCap.GetCapture() |> ignore
mtvCap.ToWpfImage() |> ignore
grid.Children.Add(mtvCap.ImageElement) |> ignore
После рытья вокруг немного я считаю, что #2-это проблема, потому что UIElementCollection.Add
возвращает int
значение. Попробуйте изменить последнюю строку, чтобы выглядеть так
grid.Children.Add(mtvCap.ImageElement) |> ignore
Я знаю удивительно мало о F#, но, насколько я помню, "единица" - это их способ сказать "void", поэтому я собираюсь догадаться, что вы пытаетесь присвоить "возвращаемое значение" функции, у которой его нет, varaible. Что бы сделать наиболее вероятным кандидатом, эта строка:
let mtvCap = Rendering.MTViewerCapture(mtViewer)