F # - тип int несовместим с типом unit

Совершенно новый для функциональных языков, но я поддерживаю чужой код с большим количеством F #. Кто-нибудь может предложить некоторое понимание этого?

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

MTViewer.ImageViewer имеет тип System.Windows.Controls.Image, а grid - System.Windows.Controls.Grid.

Опять же, ошибка: тип int не совместим с типом unit

7
задан Guy Coder 29 February 2016 в 14:25
поделиться

2 ответа

F # не позволяет вам молча игнорировать возвращаемые значения. Тип unit является версией void на F #. Таким образом, ошибка, по сути, говорит

, что я ожидал, что инструкция не будет иметь возврата, но вместо этого она вернет значение типа int

Или наоборот. Я склонен неправильно читать это сообщение об ошибке.

Вероятно, происходит одно из следующих событий

  1. Рассматриваемый метод ожидает возвращаемого значения int , но метод Add возвращает void, следовательно, F # просто запрашивает возврат value
  2. Рассматриваемый метод набирается как unit , но Add возвращает int , и F # требует, чтобы вы игнорировали значение.
  3. Возвращаемые значения GetCapture или ToWpfImage , которые необходимо обрабатывать явным образом.

В последних двух случаях вы можете исправить это, передав значение функции ignore

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

После небольшого рытья я считаю, что проблема №2, потому что UIElementCollection.Add ] возвращает значение int . Попробуйте изменить последнюю строку так, чтобы она выглядела так

grid.Children.Add(mtvCap.ImageElement) |> ignore
14
ответ дан 6 December 2019 в 14:00
поделиться

Я очень мало знаю о F #, но, насколько я помню, «unit» - это их способ сказать «void», так что я предполагаю, что вы пытаетесь присвоить «возвращаемое значение "функции, у которой его нет, в переменную. Наиболее вероятным кандидатом будет эта строка:

let mtvCap = Rendering.MTViewerCapture (mtViewer)

1
ответ дан 6 December 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: