【问题标题】:Struct in NXC and F#NXC 和 F# 中的结构
【发布时间】:2014-12-10 21:52:22
【问题描述】:

我有一个问题:

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

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

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

谢谢。

【问题讨论】:

  • 你想创建一个归零的结构数组吗?
  • 其实重点是,我正在尝试在 F# 中再次编写 NXC 代码。但我无法理解 NXC 中 struct 的意义。在写colorType cubeColor[6*9]的时候,struct中的哪些值被调用。
  • @yeniden - 正如丹尼尔所说,这只是一个归零的结构数组
  • 那我现在能做什么?你有什么想法吗?

标签: c++ c struct f# nxc


【解决方案1】:

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

但是,您应该注意:

  • struct 在 CLI(以及 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,如果您的浏览器兼容,它甚至还提供示例编译器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 2011-08-17
    • 2019-05-12
    • 2014-01-28
    • 1970-01-01
    相关资源
    最近更新 更多