.net 非统一实例化中的用法意味着什么?

.net 非统一实例化中的用法意味着什么?,.net,generics,f#,mailboxprocessor,.net,Generics,F#,Mailboxprocessor,我无法编译以下代码: open Genotype open Genome type IAgent = abstract member CrossoverA: Genome<'T> -> unit type internal AgentMessage<'T> = | GetEnergy of AsyncReplyChannel<int> | CrossoverMessage of Genome<'T> | Compar

我无法编译以下代码:

open Genotype
open Genome

type IAgent =
    abstract member CrossoverA: Genome<'T> -> unit

type internal AgentMessage<'T> = 
  | GetEnergy of AsyncReplyChannel<int>
  | CrossoverMessage of Genome<'T>
  | CompareMessage of Genome<'T>

type Agent<'T>(initialLifeEnergy : int, genotype : IGenotype<'T>) =
    let LifeEnergy = initialLifeEnergy
    let mailbox = new MailboxProcessor<AgentMessage<'T>>(fun inbox ->
        let rec loop  =
            async {  
                    let! (msg) = inbox.Receive()
                    printfn "Message received: %O" msg
                    match msg with 
                        | GetEnergy reply -> 
                              reply.Reply(LifeEnergy)
                        | CrossoverMessage genome->
                            printfn "crossover"
                        | CompareMessage fenome ->
                            printfn "compare" 
                        }
        loop )
    do
        mailbox.Start()


    member this.CrossoverA(genomeIn: Genome<'T>)  = (this :> IAgent).CrossoverA(genomeIn: Genome<'T>) 
    interface IAgent with
        member this.CrossoverA(genomeIn: Genome<'T>)  = 
            printfn "Crossover"
            mailbox.Post(CrossoverMessage genomeIn)
开放基因型
开放基因组
类型=
摘要成员交叉:基因组=
|获取AsyncReplyChannel的能量
|基因组交叉信息
类型(代理)=
设LifeEnergy=initialLifeEnergy
let mailbox=new MailboxProcessor)=(此:>IAgent).CrossoverA(基因组:基因组)=
printfn“交叉”
邮箱.Post(交叉消息genomeIn)

行中的成员this.CrossoverA出错(genomeIn:Genome由于对接口实现的前向调用,它可能无法推断
CrossoverA
的返回类型。类型推断只能使用当前点之前可用的类型信息。理想情况下,接口将前向调用传递给类,而不是相反。这将解决推断问题


编辑-另一个问题似乎是在
IAgent.CrossoverA
中使用类型arg
'T
,它在类型上没有定义。

一点也没有。如果不转发到接口,错误1和3就消失了,但错误2仍然存在。顺便问一下,如何实现接口转发类调用的方式?啊,你是是的。我认为问题在于
IAgent.CrossoverA
使用了一个未在类型上定义的类型arg。将类型arg添加到接口定义中(
type IAgent