일부 C# 코드를 F #으로 변환하려고하는데 약간의 문제가 발생했습니다. 다음은 이미 가지고있는 F # 코드입니다.F # 일반 유형의 문제
open System
open System.Collections
open System.Collections.Generic
type Chromosome<'GeneType>() =
let mutable cost = 0
let mutable (genes : 'GeneType[]) = Array.zeroCreate<'GeneType> 0
let mutable (geneticAlgorithm : GeneticAlgorithm<'GeneType>) = new GeneticAlgorithm<'GeneType>()
/// The genetic algorithm that this chromosome belongs to.
member this.GA
with get() = geneticAlgorithm
and set(value) = geneticAlgorithm <- value
/// The genes for this chromosome.
member this.Genes
with get() = genes
and set(value) = genes <- value
/// The cost for this chromosome.
member this.Cost
with get() = cost
and set(value) = cost <- value
/// Get the size of the gene array.
member this.Size = genes.Length
/// Get the specified gene.
member this.GetGene(gene:int) =
genes.[gene]
member this.GeneNotTaken(source:Chromosome<'GeneType>, taken:IList<'GeneType>) =
let geneLength = source.Size
for i in 0 .. geneLength do
let trial = source.GetGene(i)
if(not (taken.Contains(trial))) then
taken.Add(trial)
trial
Gene not taken 메서드를 시작하기 전까지는 모든 것이 잘 진행되고있었습니다. 제가 보는
private GENE_TYPE GetNotTaken(Chromosome<GENE_TYPE> source,
IList<GENE_TYPE> taken)
{
int geneLength = source.Size;
for (int i = 0; i < geneLength; i++)
{
GENE_TYPE trial = source.GetGene(i);
if (!taken.Contains(trial))
{
taken.Add(trial);
return trial;
}
}
return default(GENE_TYPE);
}
컴파일러 오류는 다음과 같습니다 : 다음은 그 방법에 대한 C# 코드 (나는 또한뿐만 아니라 기본 유형을 반환 도움이 필요하지만, 그냥 지금까지 아직하지 않았다)이다
"이 프로그램 포인트 이전에 일률적 인 인스턴스 생성시 일반 멤버 'GeneNotTaken'이 사용되었습니다.이 멤버가 먼저 발생하도록 멤버의 순서를 변경하거나 인수 유형을 포함하여 멤버의 전체 유형을 명시 적으로 지정하십시오 , 반환 유형 및 추가 일반 매개 변수 및 제약 조건이 포함됩니다. "
및
는 "이 코드는 명시 적 유형 변수 'GeneType가'일반화 할 수 없기 때문에 그 주석에 의해 요구되는 것보다 덜 일반적인이다. 그것은 '단위'로 제한했다."
당신은 내가 이전에 내가 문제가 무엇인지 모르는 이유는 그 시점에 GeneNotTaken 멤버를 사용하지 않은 볼 수있는 경우를 제외하고 첫 번째 오류는, 맑은있을 거라고 생각합니다.
내 질문의 두 번째 부분은 메서드의 끝에 반환 기본값 ('GeneType)을 추가하는 방법입니다.
내 코드 개선을위한 다른 제안 사항이 있으면 언제든지 공유하십시오.
Tomas! – Beaker
오타가 눈치 챘을 것입니다. 그러나 마지막 루프 0은 내가 생각하는 대답의 첫 부분에서 오프사이드입니다. – FinnNk
@FinnNk : 지적 해 주셔서 감사합니다. 나는 대답을 고쳤다. –