Опитвам се да напиша функция, която приема байтов масив и го преобразува в ADT, както е посочено от параметър. Възможно ли е това във F#? Това е моят ADT:
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