web-dev-qa-db-fra.com

Comment effacer ou supprimer un global en julia?

Y a-t-il une syntaxe qui fait quelque chose de similaire à "clair" de MATLAB, c'est-à-dire si j'ai une variable globale "a". Comment m'en débarrasser? Comment puis-je faire l'analogue de

clear a
24
Mateo

Depuis 0.3.9, il est possible d'effacer toutes les variables globales (obtenir un nouvel espace de travail), via la fonction workspace ().

Il est également possible d'obtenir les variables du dernier espace de travail en utilisant LastMain (par exemple LastMain.foobar).

Donc, actuellement, la seule façon de faire ce que vous désirez est de tout effacer et de tout transférer, sauf la variable que vous souhaitez, dans votre nouvel espace de travail.

11
Audun Wilhelmsen

Voir la dernière réponse à cette question ici: http://docs.julialang.org/en/latest/manual/faq/#how-do-i-delete-an-object-in-memory

Extrait des documents:

Julia n'a pas d'analogue de la fonction claire de MATLAB; une fois qu'un nom est défini dans une session Julia (techniquement, dans le module Main), il est toujours présent.

Si l'utilisation de la mémoire vous préoccupe, vous pouvez toujours remplacer les objets par ceux qui consomment moins de mémoire. Par exemple, si A est un tableau de taille gigaoctet dont vous n'avez plus besoin, vous pouvez libérer la mémoire avec A = 0. La mémoire sera libérée la prochaine fois que le garbage collector s'exécute; vous pouvez forcer cela à se produire avec gc ().

10
tholy

Dans Julia 0.6 (je ne sais pas si une ancienne version le supporte ou non). Vous pouvez supprimer la variable et libérer sa mémoire en appelant clear!().

Vous devez appeler clair! sur le nom symbolique de la variable:

Julia> x = 5
5

Julia> sizeof(x)
8

Julia> clear!(:x)

Julia> sizeof(x)
0

Comme l'a souligné DFN, cela ne supprimera pas réellement les objets mais les définira sur nothing. Ceci est utile pour libérer de la mémoire de votre espace de travail car vous pouvez "supprimer" l'empreinte mémoire des objets non constants.

7
niczky12

Actuellement, on n'en a pas. Il y a cependant un problème pour suivre cette fonctionnalité:

https://github.com/JuliaLang/Julia/issues/2385

6
StefanKarpinski

Pour Julia-0.6.4,

clear!(:x)

fonctionne comme mentionné par @niczky ET il fonctionne dans iJulia.

Cependant, pour Julia-1.0.,

clear!(:x)

... lance ce qui suit:

ERROR: UndefVarError: clear! not defined
Stacktrace:
 [1] top-level scope at none:0

Donc, c'est cassé pour Julia-1.0.0.

5
Long short

Absolument clair! (: X) ne fonctionne pas avec Julia 0.6.0 dans le cahier (IJulia)! Vous pouvez choisir d'utiliser x = comme alternative.

1
spg