我无法编译以下代码:
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)
行中有错误member this.CrossoverA(genomeIn: Genome<'T>)
:
错误 1 在此程序点之前的非统一实例化中使用了通用成员“CrossoverA”。考虑重新排序成员,以便首先出现此成员。或者,显式指定成员的完整类型,包括参数类型、返回类型和任何其他泛型参数和约束。
错误 2 此绑定的一个或多个显式类或函数类型变量无法泛化,因为它们被限制为其他类型
并且也符合要求mailbox.Post(CrossoverMessage genomeIn)
:
错误 3 类型 ''T' 与类型 ''a' 不匹配
我没有在项目的任何地方使用变量“a”。此外,名称 CrossoverA 仅在此文件中使用。我感到困惑,项目中的其他类是用类似的打字模式创建的,而且效果很好。