Ich habe einen zusammengesetzten Typ erstellt
mutable struct Person
id::Int64
end
Das ging gut, also möchte ich den Typ so erweitern
mutable struct Person
id::Int64
contacts::Array{Int64}
end
aber mir wird gesagt, dass dies ein ist invalid redefinition of constant Person
.
Wie lösche ich einen Typ? Gibt es neben dem Neustart der REPL noch eine andere Möglichkeit? (Bitte sag ja.)
Revise
?Antworten:
Dies ist leider eine der wenigen Einschränkungen von
Revise.jl
(und wenn es einen Weg gäbe, dies zu tun, würde es wahrscheinlich in implementiert werdenRevise
). Selbst wennRevise
Sie dies verwenden, müssen Sie Julia derzeit neu starten, um die Definition eines Typs zu ändern.Lassen Sie mich nur versuchen, den Grund zu veranschaulichen, warum dies derzeit nicht möglich ist:
Ich verwende manchmal den folgenden Trick während der Entwicklungsphase eines neuen Typs. Es ist jedoch ein Hack, und ich bin mir nicht sicher, ob ich es empfehlen sollte: Verwenden Sie es auf eigenes Risiko.
Die Idee besteht Ihre tatsächliche Typdefinitionen in Nummerierung, benennen Sie Typen wie
Person1
,Person2
mit einer Versionsnummer , die jedes Mal erhöht wird die Definition ändert. Um die Verwendung dieser nummerierten Typnamen in Methodendefinitionen im gesamten Code zu verteilen, können Sie die neueste Definition vorübergehend auf einen gemeinsamen, nicht nummerierten Namen aliasen.Angenommen, Sie haben eine erste Implementierung Ihres
Person
Typs mit nur einem Namen:Angenommen, Sie möchten die Definition des
Person
Typs ändern , um einid
Feld hinzuzufügen :quelle
Nein, dies ist nicht möglich, ohne Julia neu zu starten.
quelle