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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage