Проблема несоответствия типов F# в демонстрации DirectX
Я хотел попробовать демонстрационную версию FDX, однако она вызвала у меня ряд ошибок и предупреждений из-за проблем совместимости, поэтому я пытался заставить ее работать правильно. Полный код на пастбине.
У меня проблемы с кодом здесь:
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# интерактив.
motion-sample.fs (438,53): ошибка FS0001: несоответствие типов. Ожидая
((('a * 'b) список -> 'c) * (('a * 'b) список -> 'd)) ref
но учитывая
(float [,] * float [,]) ref.
Список типов '('a * 'b) -> 'c'не соответствует типу'float [,]'
Спасибо за любую помощь!
1 ответ
У меня не было времени хорошенько взглянуть, но попробуйте изменить определение 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.