Я пытаюсь написать функцию, которая принимает массив байтов и преобразует его в ADT, как указано параметром. Возможно ли это в F#? Это мой АТД:
type DataFormat =
| Alphanumeric of string
| Angle16 of float
| Angle32 of float
| Int16 of int
| Int32 of int
Я пробовал около десяти различных способов форматирования спецификации функции, но не могу понять... Я прочитал некоторые другие сообщения на SO, такие как этот, что заставляет меня думать, что это сложнее, чем я думаю. Это были мои последние две попытки, которые, похоже, ни к чему не привели.
// Attempt #1
// This function would require that I pass in a shell
// object as the "format" parameter to make it work, like:
// let converted = fromBytes1 myArray Angle16(0.0)
let fromBytes1 (b : byte[]) (format : DataFormat) =
match format with
| Alphanumeric -> Alphanumeric(BitConverter.ToString(b))
| Angle16 -> // convert 2-bytes into float...omitted
| Angle32 -> Angle32(float (BitConverter.ToSingle(b,0)))
// Attempt #2
// the 'T seems to only specify the underlying type like (float, int)
let fromBytes2<'T> (b : byte[]) =
match 'T with
| Alphanumeric -> Alphanumeric(BitConverter.ToString(b))
| Angle16 -> // convert 2-bytes into float...omitted
| Angle32 -> Angle32(float (BitConverter.ToSingle(b,0)))
Я также пытался использовать typeof‹>, но это, похоже, возвращает только базовый базовый тип.
b
там (поскольку вы просто игнорируете его) - помимо этого вы можете использоватьmatch
для сопоставления типов/классов во время выполнения с помощью оператора:?
, но я не думаю, что это что ты пытаешься сделать - person Random Dev   schedule 24.04.2015