F # problème d'incompatibilité de type DirectX démo
Question
J'ai eu envie d'essayer le FDX démo mais il m'a donné une série d'erreurs et d'avertissements en raison de problèmes de compatibilité, donc j'ai essayé de le faire fonctionner correctement. Le code complet est sur un pastebin .
Je vais avoir du mal avec le code ici:
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
ce qui me donne l'erreur suivante dans F # interactive.
mouvement-sample.fs (438,53): FS0001 d'erreur: incompatibilité de type. Attendre un
((( 'A *' b) la liste -> 'c) * ((' a * 'b) la liste ->' d)) ref
mais étant donné un
(Float [,] * float [,]) ref.
Le type '(' a * « b) la liste -> 'c' ne correspond pas au type 'float [,]'
Merci pour toute aide!
La solution
Je n'ai pas eu le temps de prendre un bon coup d'oeil, mais essayez de changer la définition de meshGet à
let meshGet (mesh:_[,]*_[,]) (i,j) = let X,Y = mesh in X.[i,j], Y.[i,j]
EDIT
En fait, mieux encore, on dirait qu'il ya une copie plus fraîche à
http://code.msdn.microsoft.com /fsharpsamples/Release/ProjectReleases.aspx?ReleaseId=2705
vous devriez l'utiliser plutôt que les années-ancien posté sur hubfs.