Есть ли более простой способ работать с изменяемыми структурами F # - PullRequest
0 голосов
/ 23 сентября 2011

Как я это делаю сейчас, действительно странно.И печально то, что у меня есть много структур и я часто их использую.

Вот как я сейчас действую:

[<type:StructLayout(LayoutKind.Sequential, Pack=1, CharSet=CharSet.Ansi)>]
type OneDevice = {
        mutable id              : UInt16
        mutable typeDev         : byte
        mutable portNum         : byte
        mutable Parity          : byte
        mutable StopBits        : byte
        mutable BaudRate        : byte
        mutable addr1           : byte 
        mutable addr2           : byte 
        mutable useCanal        : byte
        mutable idGroup1        : byte
        mutable idGroup2        : byte 
        mutable idGroup3        : byte
        mutable idGroup4        : byte
        mutable idGroupSos1     : byte 
        mutable idGroupSos2     : byte 
        mutable idGroupSos3     : byte 
        mutable idGroupSos4     : byte 
        mutable idSosReserv     : byte 
        mutable addrModbus      : byte 
        mutable offsetModbus    : System.UInt16
        [<field: MarshalAs(UnmanagedType.ByValArray, SizeConst = 17)>]
        mutable pwd             : byte array
        mutable offsetInModbus  : UInt16
        mutable reserv          : UInt16 }

Вот как я определяю структуры."type str = struct ..." работает действительно иначе!Мне нужен именно мой вариант структуры.Но написание этого - только половина моей проблемы, вторая половина - то, как я создаю новый элемент этой структуры.пусть mutable dev = new OneDevice () не работает!Поэтому мне нужно сделать следующее:

let mutable dev = {  
    id              = 0us 
    typeDev         = 0x00uy
    portNum         = 0x00uy
    Parity          = 0x00uy
    StopBits        = 0x00uy
    BaudRate        = 0x00uy
    addr1           = 0x00uy
    addr2           = 0x00uy
    useCanal        = 0x00uy
    idGroup1        = 0x00uy
    idGroup2        = 0x00uy
    idGroup3        = 0x00uy
    idGroup4        = 0x00uy
    idGroupSos1     = 0x00uy
    idGroupSos2     = 0x00uy
    idGroupSos3     = 0x00uy
    idGroupSos4     = 0x00uy
    idSosReserv     = 0x00uy
    addrModbus      = 0x00uy
    offsetModbus    = 0us
    pwd             = Array.zeroCreate 17
    offsetInModbus  = 0us
    reserv          = 0us }

И это самая странная часть здесь.Можно ли как-нибудь упростить?

Спасибо!

1 Ответ

5 голосов
/ 23 сентября 2011

Проблема в том, что это не структуры. Это типы записей. Используйте type [<Struct>] MyStruct = ....

См. http://msdn.microsoft.com/en-us/library/dd233233.aspx и http://msdn.microsoft.com/en-us/library/ee340416.aspx

Типы записей: http://msdn.microsoft.com/en-us/library/dd233184.aspx

Структуры являются типами значений. Записи являются ссылочными типами, такими как классы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...