Структура в 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/, который даже содержит компилятор для примеров, если ваш браузер совместим.