簡體   English   中英

相互遞歸的F#函數,鍵入問題

[英]Mutually recursive F# functions, typing issue

遇到此代碼的麻煩:

  let subscribe (nm : NamespaceManager) (subName : string) (desc : TopicDescription)  : Async<SubscriptionDescription> =
    let rec first_create () =
      async {
        let! exists = desc |> exists nm
        if exists then return! (then_create_subscription () : Async<SubscriptionDescription>)
        try
          let beginCreate = nm.BeginCreateTopic : string * AsyncCallback * obj -> IAsyncResult
          logger.DebugFormat("creating topic '{0}'", desc)
          let! tdesc = Async.FromBeginEnd(desc.Path, beginCreate, nm.EndCreateTopic)
          return! first_create ()
        with | :? MessagingEntityAlreadyExistsException -> return! then_create_subscription () }
    and then_create_subscription ()  : Async<SubscriptionDescription> =
      async {
        let beginCreate = nm.BeginCreateSubscription : string * string * AsyncCallback * obj -> IAsyncResult
        return! Async.FromBeginEnd(desc.Path, subName, beginCreate, nm.EndCreateSubscription) }
    first_create ()

在第5行,它着重then_create_subscription () : Async<SubscriptionDescription>指出:

類型不匹配。 期望使用Async<unit>但給出了Async<SubscriptionDescription>類型'unit'與類型' SubscriptionDescription '不匹配

存在看起來像這樣:

  let exists (nm : NamespaceManager ) (desc : PathBasedEntity) = 
    async { return! Async.FromBeginEnd(desc.Path, nm.BeginTopicExists, nm.EndTopicExists) }

我希望它創建主題,然后繼續為其創建訂閱。

有任何想法嗎?

else之后必須有一個else分支,否則if是一個語句,而不是一個表達式。 其他不是隱式的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM