DirectX演示中的F#类型不匹配问题

时间:2009-07-19 18:47:19

标签: f# directx demo pastebin

我一直想尝试FDX demo,但由于兼容性问题,它给了我一系列错误和警告,所以我一直在尝试让它正常工作。 完整代码位于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)列表 - >'d))参考
但是给了一个 (float [,] * float [,])ref。
类型'('a *'b)列表 - > 'c'与'float [,]'

类型不匹配

感谢您的帮助!

1 个答案:

答案 0 :(得分: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上的岁月。