Структура в NXC и F#

У меня вопрос:

В 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

Но я понятия не имею, как вызвать colorType cubeColor[6*9]; в F#.

Не могли бы вы помочь мне в этом деле?

Благодарю.

1 ответ

Как люди сказали в комментариях, технически, ответ Array.zeroCreate (6*9) с последующим : colorType [] если компилятор не может вывести тип из контекста. Это создает 54 экземпляра структуры, последовательно помещенных в массив.

Тем не менее, вы должны знать, что:

  • Значение struct в CLI (и, следовательно, F#) очень отличается от его значения в C. Я не знаю NXC, но вы должны проверить MSDN на структурах, чтобы убедиться, что это то, что вы хотите. В F# struct обозначает тип значения, который обычно является оптимизацией производительности, но также изменяет семантику.

  • В F# значения являются неизменяемыми по умолчанию, и colorType не имеет конструктора, поэтому все значения будут обнуляться, и вы не сможете ничего с ним сделать, пока не добавите конструктор. Вместо этого, изменчивость полей может вызвать головную боль, если тип остается структурой из-за вышеупомянутых изменений в семантике. Я бы не рекомендовал это.

  • Хотя запуск с обнуляемым изменяемым массивом типичен для многих языков программирования, в F# он является лишь редко используемым инструментом повышения производительности. Обычно сначала нужно начать с неизменного списка с фактическими данными или другими видами последовательностей и выполнить сопоставления исходных данных с новыми объектами, содержащими желаемый результат.

Я бы порекомендовал сначала сделать несколько уроков или читать по F# и привыкнуть к типичным инструментам языка. Такие темы, как структуры, явные поля (val) и императивные инструменты F#, могут быть не лучшей отправной точкой.

Есть много интернет-ресурсов для изучения F#, например http://tryfsharp.org/, который даже содержит компилятор для примеров, если ваш браузер совместим.

Другие вопросы по тегам