NXC和F#中的结构

yen*_*den -3 c c++ f# struct nxc

我有个问题:

在NXC中有这样的结构函数:

struct colorType
{
  int colorval;
  unsigned int rawRed;
  unsigned int rawGreen;
  unsigned int rawBlue;
  unsigned int normRed;
  unsigned int normGreen;
  unsigned int normBlue;
};

colorType cubeColor[6*9];
Run Code Online (Sandbox Code Playgroud)

我在F#中创建了相同的结构,如下所示:

type colorType =
    struct 
        val colorval: int
        val rawRed: uint16
        val rawGreen: uint16
        val rawBlue: uint16 
        val normRed: uint16
        val normGreen: uint16
        val normBlue: uint16
    end
Run Code Online (Sandbox Code Playgroud)

但我不知道如何调用colorType cubeColor [6*9]; 在F#中.

你可以帮我解决这个案子吗?

谢谢.

Van*_*oiy 5

正如人们在评论中所说的那样,从技术上讲,答案是Array.zeroCreate (6*9),: colorType []如果编译器无法从上下文推断出类型,则可选择.这将创建54个结构实例,按顺序放入数组中.

但是,您应该知道:

  • structCLI中的含义(以及F#)与它在C中的含义非常不同.我不知道NXC,但你应该检查结构的MSDN以确保这是你想要的.在F#中,struct表示值类型,通常是性能优化,但也会改变语义.

  • 在F#中,默认情况下值是不可变的,并且colorType没有构造函数,因此所有值都将保持为零,并且在添加构造函数之前,您将无法对其执行任何有用的操作.如果类型仍然是结构,那么使字段变为可变会导致令人头疼,因为上述语义的变化.我不建议这样做.

  • 虽然从零开始,可变数组在许多编程语言中都是典型的,但它只是F#中使用稀疏的性能工具.通常,首先从具有实际数据其他类型序列的不可变列表开始,并从原始数据到保持所需结果的新对象进行映射.

我建议先做一些教程或阅读F#,并习惯语言的典型工具.结构,显式字段(val)和F#的命令式工具等主题可能不是最好的起点.

有许多用于学习F#的在线资源,例如tryfsharp.org,如果您的浏览器兼容,它甚至还为样本提供了编译器.