F# Проблема несоответствия типа в DirectX Demo
Вопрос
Я хотел попробовать FDX Демо Однако это дало мне ряд ошибок и предупреждений из -за проблем совместимости, поэтому я пытался заставить его работать правильно. Полный код находится на Pastebin.
У меня проблемы с кодом здесь:
let drawSurf f (device:Device) =
let m,n = meshDims !mesh in
let data = Array.init (n*m) (fun k ->
let i,j = k2ij !mesh k in
let x,y = meshGet !mesh (i,j) in
let z = f (x,y) in // single precision f
(x,y,z))
in
let strips = triangleRows n m |> map (map (blendPlace !mesh data)) in
List.iter (fun strip -> drawTriangeStrip strip device) strips;
let m,n = meshDims !mesh in
let lines = gridLines n m in
let lines = lines |> map (colorPlace !mesh data Color.Black) in
drawLineList lines device
что дает мне следующую ошибку в F# Interactive.
Motion-Sample.fs (438,53): ошибка FS0001: несоответствие типа. Ожидая
((('a *' b) список -> 'c) * ((' a * 'b) list ->' d)) ref
но данный
(float [,] * float [,]) ref.
Тип '(' a * 'b) list ->' c 'не соответствует типу' float [,] '
Спасибо за помощь!
Решение
У меня не было времени, чтобы хорошо взглянуть, но попробуйте изменить определение Meshget на
let meshGet (mesh:_[,]*_[,]) (i,j) = let X,Y = mesh in X.[i,j], Y.[i,j]
РЕДАКТИРОВАТЬ
На самом деле, даже лучше, похоже, что есть более свежая копия в
http://code.msdn.microsoft.com/fsharpsamples/release/projectreleases.aspx?releaseid=2705
Вы должны использовать это, а не лет, опубликованный на Hubfs.