eval im Funktionsumfang (Zugriff auf Funktionsargumente)
Gegeben
abstract ABSGene
type NuGene <: Genetic.ABSGene
fqnn::ANN
dcqnn::ANN
score::Float32
end
function mutate_copy{T<:ABSGene}(gene::T)
all_fields_except_score = filter(x->x != :score, names(T))
all_fields_except_score = map(x->("mutate_copy(gene.$x)"),all_fields_except_score)
eval(parse("$(T)("*join(all_fields_except_score,",")*")"))
end
ng = NuGene()
mutated_ng = mutate_copy(ng)
Ergebnisse in:
ERROR: gene not defined
in mutate_copy at none:4
Wenn ich es nur als String betrachte (vor dem Ausführen von parse und eval), sieht es gut aus:
"NuGene(mutate_copy(gene.fqnn),mutate_copy(gene.dcqnn))"
Eval scheint jedoch nichts über das Gen zu wissen, das in die mutate_copy-Funktion übertragen wurde.
Wie greife ich auf das Genargument zu, das in die mutierte Kopie übergeben wurde?
Ich habe es versucht:
function mutate_copy{T<:ABSGene}(gene::T)
all_fields_except_score = filter(x->x != :score, names(T))
all_fields_except_score = map(x-> ("mutate_copy($gene.$x)"),all_fields_except_score)
eval(parse("$(T)("*join(all_fields_except_score,",")*")"))
end
Aber das erweitert das Gen in der Zeichenkette, was nicht das ist, was ich will.