Вопрос

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

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

Mtviewer.imageViewer имеет тип System.Windows.controls.image, а сетка является System.Windows.controls.Grid.

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

Это было полезно?

Решение

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

Я ожидал, что заявление не будет возврата, но вместо этого он возвращает значение int

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

Что, вероятно, происходит одно из следующих

  1. Рассматриваемый метод ожидает int возвращаемое значение, но метод Add Возвращает void, следовательно, f # просто просит возвратный стоимость
  2. Рассматриваемый метод набирается как unit но Add возвращает АН int и f # нуждается в вас игнорировать значение.
  3. То 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 #, но, как я помню, «единица» - это их способ сказать «пустота», поэтому я догадаюсь, что вы пытаетесь назначить «возвращаемое значение» функции, которая не имеет одного , к варианту. Это сделало бы наиболее вероятным кандидатом, эта линию:

let mtvCap = Rendering.MTViewerCapture(mtViewer)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top