-3

我有个问题:

NXC中有这样一个struct函数:

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

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

你能帮我处理这个案子吗?

谢谢。

4

1 回答 1

5

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

但是,您应该知道:

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

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

  • 虽然从零开始的可变数组在许多编程语言中都很常见,但它只是 F# 中很少使用的性能工具。通常,首先会从一个包含实际数据其他类型序列的不可变列表开始,然后将原始数据映射到包含所需结果的新对象。

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

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

于 2014-12-11T12:51:21.470 回答