NXC和F#中的结构

时间:2014-12-10 21:52:22

标签: c++ c struct f# 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];

我在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

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

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

感谢。

1 个答案:

答案 0 :(得分:5)

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

但是,你应该知道:

  • CLI中struct的含义(以及F#)与C中的含义非常不同。我不了解NXC,但您应该检查the MSDN on structs确保这是你想要的。在F#中,struct表示值类型,这通常是性能优化,但也会改变语义。

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

  • 虽然从一个归零的可变数组开始,但在许多编程语言中都是典型的,它只是F#中一种稀疏使用的性能工具。通常,首先会从an immutable list with actual dataother kinds of sequences开始,然后从原始数据到保存所需结果的新对象进行映射。

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

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