Добавление элемента в базу данных couchbase с кодом f # - PullRequest
1 голос
/ 14 июня 2019

Привет. Я пытаюсь добавить простой документ в базу данных couchbase из F #, но у меня возникают некоторые проблемы при создании документа.

Я просто попробовал очень простой подход, пытаясь перевести c # в f #, он работалнормально, пока определение документа

open System
open Couchbase


type TestDoc(id : string, content : string) = 
     interface IDocument with
        member this.Cas
            with get (): uint64 = 
                failwith "Not Implemented"
            and set (v: uint64): unit = 
                failwith "Not Implemented"
        member this.Expiry
            with get (): uint32 = 
                failwith "Not Implemented"
            and set (v: uint32): unit = 
                failwith "Not Implemented"
       member this.Id
            with get (): string = 
               id
            and set (v: string): unit = 
               failwith "Not Implemented"
       member this.Token: Core.Buckets.MutationToken = 
            failwith "Not Implemented"



 let t() = 
    let cluster = new Cluster()
    let bucket = cluster.OpenBucket("beer-sample")
    let document = TestDoc ("hei", null) :> Document<dynamic>
    let res = bucket.Insert(document)
    res



[<EntryPoint>]
let main argv =
     printfn "Hello World from F#!"

      0 // return an integer exit code

Компилятор будет жаловаться, что ключевое слово "dynamic" не существует?Кажется очень странным, так как он отлично работает в C #.

1 Ответ

3 голосов
/ 14 июня 2019

dynamic не является реальным типом.Это просто специальный синтаксис в C #, который указывает компилятору обрабатывать переменные этого типа особым образом.

Когда вы объявляете что-то dynamic в C #, фактический тип, который он получает, равен Object, который в F # называется obj.Таким образом, эквивалентным было бы приведение к Document<obj>.

Но я даже не думаю, что сработает: вы не можете привести ваш тип к Document, потому что ваш тип не является подтипом Document(т.е. не наследует от него).Компилятор будет жаловаться.

Вам нужно либо сделать свой тип подтипом Document, либо, возможно, вы намеревались вместо этого привести к IDocument, чего ожидает IBucket.Insert?На данный момент я больше не могу вам помочь, потому что не понятно, что вы имели в виду.

...