我有一个问题:
在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]; 。
你可以帮我解决这个案子吗?
感谢。
答案 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 data或other kinds of sequences开始,然后从原始数据到保存所需结果的新对象进行映射。
我建议先做一些教程或阅读F#,并习惯语言的典型工具。结构,显式字段(val)和F#的必要工具等主题可能不是最好的起点。
有许多用于学习F#的在线资源,例如tryfsharp.org,如果您的浏览器兼容,它甚至还为样本提供了编译器。