次のコードをコンパイルできません。
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 このバインディングの明示的なクラスまたは関数型変数の 1 つ以上を一般化できませんでした。他の型に制約されていたためです
また、並んでいmailbox.Post(CrossoverMessage genomeIn)
ます:
エラー 3 型 ''T' は型 ''a' と一致しません
プロジェクトのどこにも変数「a」を使用していません。また、CrossoverA という名前は、このファイルでのみ使用されます。プロジェクトの他のクラスは同様のタイピング パターンで作成され、うまく機能します。