F#型拡張プロパティが機能しない

ingted

拡張プロパティが変更できないのは奇妙です...誰か助けてもらえますか?

open System.IO.Ports
open System.Text
open System.Text.RegularExpressions

type UAgent<'T> = MailboxProcessor<'T>


module ComPortManager =
    type MailboxProcessor<'T> with
        member this.sP = ref(new SerialPort("0"))
        member this.receivedSeq : byte [] = Array.empty
        member this.pastMsgSent : seq<string> = Seq.empty

    type Cmd =
    | Send = 0
    | Remove = 1
    | Add = 2


    type UartOP =
    | Open of unit
    | Comm of Cmd * string
    | Handler of Cmd * SerialDataReceivedEventHandler


    let CreateComPort = 
        fun pN bR (p : System.IO.Ports.Parity) dB (sB : System.IO.Ports.StopBits) to' handler ->
            match Array.exists (fun a -> a = pN) (SerialPort.GetPortNames()) with
            | false -> failwith "Not valid comport!"
            | _ -> ()            

            let mutable agent : UAgent<UartOP> =
                UAgent.Start(handler)
            let mutable sP = new SerialPort(pN)
            agent.sP := sP
            agent.sP.contents.Close()
            match agent.sP.contents <> null with
            | true ->
                agent.sP.contents.Close() 
            | false ->
                ()

            agent.sP.contents.BaudRate    <- bR
            printfn "\r\n=o==> %s" (bR.ToString())
            printfn "\r\n=o==> %s" (sP.BaudRate.ToString())
            printfn "\r\n=o==> %s" (agent.sP.contents.BaudRate.ToString())
            agent.sP.contents.Parity      <- p
            agent.sP.contents.DataBits    <- dB
            agent.sP.contents.StopBits    <- sB
            agent.sP.contents.ReadTimeout <- to'             
            agent

変数sPのプロパティコンテンツのボーレートは、bRに設定しようとしても変化しません。

出力は次のようになります。

= o ==> 19200

= o ==> 9600

= o ==> 9600

トマーシュ・ペトリッチ

これを行おうとしている方法は機能しません。F#では、拡張機能は既存の型に新しいフィールドを追加できないため、実際に変更可能な状態を追加することはできません。

あなたの定義がしていることは、常に新しい値(の場合は新しい参照セル、の場合はsP新しい配列receivedSeq)を返す一連の読み取り専用プロパティを追加することですを呼び出すたびにagent.sP新しい値が作成されて返されます(したがって、すぐにガベージコレクションされる新しいコピーを変更することになります)。

これを解決するには、メールボックスプロセッサをラップし、次のような行に沿って追加の状態を追加する新しいタイプを作成する必要があります。

type MyMailbox<'T>() = 
  let mbox = MailboxProcessor.Start( ... )
  member val sP = ref(new SerialPort("0")) with get, set
  member val receivedSeq : byte [] = Array.empty with get

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

拡張プロパティのOdataフィルタリングが機能しない

分類Dev

Chrome拡張機能と「localStorage」の予期しない動作-プロパティ

分類Dev

拡張ニュースのTSプロパティdetail.registerPropertiesが日時に機能しない

分類Dev

ngIfの拡張クラスのプロパティを使用するAngular2が機能しない

分類Dev

カスタム列挙型の場合のUIView拡張機能の新しいプロパティ

分類Dev

追加のプロパティ拡張機能でプロパティ 'compileSdkVersion'が存在しないため、取得できませんファイルを開く

分類Dev

.Netの利用できない「拡張プロパティ」のような機能

分類Dev

拡張機能にストアドプロパティが含まれていない

分類Dev

拡張機能にストアドプロパティが含まれていない

分類Dev

拡張機能にストアドプロパティが含まれていない

分類Dev

Core Dataを保存したいが、「拡張機能に保存されたプロパティを含めてはならない」

分類Dev

絶対値プロパティを追加するDouble型の拡張機能を記述します

分類Dev

ghc7.10.2型族拡張機能が機能しない

分類Dev

Self:Equatableが機能しないSwiftプロトコル拡張

分類Dev

Chrome拡張機能のGoogleアナリティクスが機能しない

分類Dev

CodeIgniterUndefinedプロパティのロードが機能しない

分類Dev

JSONSchema-必要なプロパティが機能しない

分類Dev

JsonConverterがプロパティ属性として機能しない

分類Dev

関数が予期されていないコンテキストで使用されるF#拡張機能

分類Dev

log4jプロパティ:LevelMatchFilterが機能しない

分類Dev

justify-contentプロパティが機能しない

分類Dev

SpringBoot構成プロパティが機能しない

分類Dev

DialogFragmentsetCancelableプロパティが機能しない

分類Dev

SpringBoot構成プロパティが機能しない

分類Dev

SpringBoot構成プロパティが機能しない

分類Dev

Androidの標高プロパティが機能しない

分類Dev

iFramesrcプロパティと相対URLが機能しない

分類Dev

MVC無効SelectListItemプロパティが機能しない

分類Dev

jQueryAnimateがbackground-colorプロパティで機能しない

Related 関連記事

  1. 1

    拡張プロパティのOdataフィルタリングが機能しない

  2. 2

    Chrome拡張機能と「localStorage」の予期しない動作-プロパティ

  3. 3

    拡張ニュースのTSプロパティdetail.registerPropertiesが日時に機能しない

  4. 4

    ngIfの拡張クラスのプロパティを使用するAngular2が機能しない

  5. 5

    カスタム列挙型の場合のUIView拡張機能の新しいプロパティ

  6. 6

    追加のプロパティ拡張機能でプロパティ 'compileSdkVersion'が存在しないため、取得できませんファイルを開く

  7. 7

    .Netの利用できない「拡張プロパティ」のような機能

  8. 8

    拡張機能にストアドプロパティが含まれていない

  9. 9

    拡張機能にストアドプロパティが含まれていない

  10. 10

    拡張機能にストアドプロパティが含まれていない

  11. 11

    Core Dataを保存したいが、「拡張機能に保存されたプロパティを含めてはならない」

  12. 12

    絶対値プロパティを追加するDouble型の拡張機能を記述します

  13. 13

    ghc7.10.2型族拡張機能が機能しない

  14. 14

    Self:Equatableが機能しないSwiftプロトコル拡張

  15. 15

    Chrome拡張機能のGoogleアナリティクスが機能しない

  16. 16

    CodeIgniterUndefinedプロパティのロードが機能しない

  17. 17

    JSONSchema-必要なプロパティが機能しない

  18. 18

    JsonConverterがプロパティ属性として機能しない

  19. 19

    関数が予期されていないコンテキストで使用されるF#拡張機能

  20. 20

    log4jプロパティ:LevelMatchFilterが機能しない

  21. 21

    justify-contentプロパティが機能しない

  22. 22

    SpringBoot構成プロパティが機能しない

  23. 23

    DialogFragmentsetCancelableプロパティが機能しない

  24. 24

    SpringBoot構成プロパティが機能しない

  25. 25

    SpringBoot構成プロパティが機能しない

  26. 26

    Androidの標高プロパティが機能しない

  27. 27

    iFramesrcプロパティと相対URLが機能しない

  28. 28

    MVC無効SelectListItemプロパティが機能しない

  29. 29

    jQueryAnimateがbackground-colorプロパティで機能しない

ホットタグ

アーカイブ