J'essaie de trouver un raccourci vers la boucle suivante. Lorsque vous développez le package de Mathematica, on met en œuvre les modifications du code du fichier code> code>, puis souhaitez tester les modifications dans un autre ordinateur portable. Ceci est une boucle infinie ...
Donc, nous avons un paquet dans l'ordinateur portable pour que les modifications soient disponibles, Donc, je peux les tester. Il semble que sans le Y a-t-il une façon plus courte d'itérer cette boucle de développement? En particulier, évitez le départ? P> après mafusion forte> p> Si je pouvais, j'accepte les réponses de Ruebenko et de Leonid comme les deux sont utiles et résolvez mon problème. Cependant, comme une seule réponse peut être choisie, j'ai choisi que Ruebenko est dû à la simplicité et à la facilité - en modifiant simplement les besoins package.m code> et un ordinateur portable
test_package.nb code> où le test est effectué. Actuellement, lorsque je change quelque chose dans le fichier
.m code>, je dois ensuite avoir: p>
quitte [] code> ça ne fonctionne pas. P>
obtenez code> Je suis surmonté mon problème. Néanmoins, le paquet de Leonid est certainement sûr plus sophistiqué et probablement à la fin de la journée donne de meilleurs résultats, mais il doit être installé, chargé, etc. p> p>
3 Réponses :
utiliser obtenir; Ne doit que charger uniquement le paquet si ce n'est pas du tout chargé. Parfois, vous devez faire attention et utiliser Clearall sur les variables dans l'emballage. P>
@Ruebenjo: Pouvez-vous s'il vous plaît élaborer sur le problème Clearall code>? Devrait-il être dans le cahier ou dans le fichier
.m code>?
Dans le fichier .m. Dis que vous modifiez une fonction qui modifie sa signature, si vous obtenez le fichier que l'ancienne définition est toujours dans le noyau. Pour éviter cela, utilisez Clearall [myfunction]; myfunction [blab_, blah_, bla _]: = ...
comme alternative à l'utilisation simple Il utilise Notez que, pendant que je l'ai utilisé moi-même plusieurs fois, je ne prétends pas que c'est sans bug :) p> obtenir code>, comme sugetd by @ruebenko (qui est un bon conseil), vous pouvez essayer d'utiliser un package que j'ai écrit appelé
packagemanipulations` code>, qui fait ce que vous voulez. Il est disponible ici . Il existe un ordinateur portable avec des exemples illustrant comment cela fonctionne, également disponible à la page que j'ai liée. Le paquet peut recharger, effacer ou supprimer un package donné (contexte). La fonction
packagereload code> fera spécifiquement ce que vous voulez. p>
obtenez code> ou
ou
sous la hotte, mais il suivra en outre les "symboles de l'échappement" (symboles qui sont exportés publiquement mais n'ont pas de Les messages d'utilisation, et peuvent être «fuir» les détails de la mise en œuvre) et peuvent éventuellement résoudre les problèmes d'observation en faveur du paquet rechargé. Notez que
packagereload code> appelle automatiquement
non-rétrocet code> et
Clearall code> sur les symboles de l'emballage, répondant donc au problème mentionné par @ruebenko. Vous pouvez trouver plus de détails dans l'exemple Notebook fourni avec le package. p>
Il est temps de se rapprocher de vos «ressources supplémentaires» ;-)
@nilo de roock Malheureusement, cette section a été la même pour environ 3 ans i> maintenant (c'est vraiment pathétique). J'ai beaucoup plus que je voudrais y ajouter là, mais jusqu'à présent n'avait pas assez de temps pour emballer, polir et tester correctement. J'espère que je vais mettre à jour ces trucs assez bientôt.
@Leonidshifrin: Merci pour l'addition. J'ai essayé de l'ajouter au début de mon paquet (après non-récupération @@ noms ["curvanalyse code> *"]; clearall @@ noms ["COREF> *"]; code> et avant le Premier
Utilisation code>). Dans le cahier de test, j'ai retourné à
Besoins Code>. Ensuite, j'ai essayé de recharger le colis après la modification (sans utiliser
Quitter [] code>), mais les modifications ne s'appliquent pas. Je devais soit utiliser
Quitter [] code> ou réutiliser le
obtenir code> alternatif.
@Dror Le code que j'ai publié devrait fonctionner - j'ai spécifiquement ajouté le code de test ci-dessus et l'avez testé moi-même. Je ne l'ai pas mentionné, car je pensais que c'était clair du contexte, mais avec cet ajout, vous doit utiliser i> utiliser obtenir code> dans tous les cas.
Besoins Code> Ne rechargez pas le package une fois qu'il a été chargé. En fait, comme je l'ai déjà mentionné aussi, la fonction
packagereload code> de mon
packagemanipulations` code> est tout ce qui fonctionne pour vous automatiquement, y compris en choisissant lequel à appeler (
a besoin < / Code> ou
Obtenez code>), appelant
non-récupération code> et
Clearall code> sur tous les noms d'emballage (sous-contextes inclus) et quelques autres choses.
@Leonidshifrin: J'ai bien peur que ce n'était pas si clair pour moi. Toute façon ça marche maintenant. Consultez mon ajout à la question pour plus de détails.
@Dror bien, je vais essayer d'être plus clair la prochaine fois. Gardez à l'esprit que juste appeler obtenir code> ne résoudra pas votre problème - vous devrez toujours appeler un code similaire à ce que j'ai proposé dans la modification, au début de votre colis, de le rendre robuste (ceci est ce que @Ruebenko a averti de sa réponse).
La méthode la plus simple consiste à utiliser Effacer code>
ou, mieux encore, Clearall code>
sur les symboles exposés Dans votre colis au tout début de votre colis, comme suit
BeginPackage["SomePackage`"]; ClearAll[ ASymbol, AnotherSymbol, ...];
J'ai ajouté (comme je l'ai vu dans un exemple) non-récupération @@ noms ["paquet code> *"]; Clearall @@ noms ["package
*"]; code> au début de mon colis. Est-ce que cet équivalent et aborde le même problème?
@RCollyer Ce serait une solution parfaite si l'un ou l'autre des paquets ne serait pas évolué ou que l'écrivain serait très discipliné (je n'étais pas). Je faisais cela aussi bien pendant un moment, mais presque chaque fois que j'ai eu quelques nouvelles fonctions ajoutées et que j'ai oublié de les ajouter à Clearall code>. Quand je me suis fatigué des bugs méchants résultant de définitions plus anciennes séjournant avec les nouvelles pour ces fonctions, j'ai écrit le colis que j'ai mentionné dans ma réponse. Et j'ai été heureux (en ce qui concerne cette question) depuis :)
@Leonidshifrin, j'ai dit que c'était le plus facile à mettre en œuvre, je n'ai pas dit que c'était une solution robuste. Mais qu'en est-il de la variante de Dror? Cela ne fonctionnerait-il pas?
@RCollyer Ce ne serait pas toute l'histoire car il ne ferait que clarifier les symboles dans le contexte principal. On aurait également besoin d'appeler Clearall code> sur tous les sous-contextes (généralement, il s'agit simplement de
privé` code>). Avec cette correction, cela fonctionnerait probablement. C'est à peu près ce que fait mon colis, mais cela fait tout cela automatiquement et a une fonctionnalité supplémentaire.
@Leonidshifrin: Pouvez-vous écrire le code explicite que vous pensez ajouter pour avoir mon approche robuster? Merci.
@Dror j'ai ajouté du code et de l'exemple d'utilisation, s'il vous plaît voir mon édition