[Core] Questions générales | |
trigram | 7-Jul-2011/12:19:08+2:00 |
J'ai plusieurs questions. Comment faire pour afficher le numéro de version d'un script à l'intérieur d'un contexte ? REBOL [ version: 0.1.0 ] ctx: context [ version: does [ print system/script/header/version ] ] Et voici le résultat : >> do %ctx.r Script: "Untitled" (none) >> ctx/version ** Script Error: Cannot use path on none! value ** Where: version ** Near: print system/script/header/version >> Ensuite, ma deuxième question est : comment faire pour appeler script avec do pour charger comme une librairie et ensuite lancer le script en tapant le nom et qu'il me lance un prompt. Exemple: REBOL [] my-ctx: context [ ] >> do %my-ctx.r >> my-ctx my-ctx>> Je ne sais pas si il faut utiliser context ou pas ? | |
guest2 | 7-Jul-2011/14:07:11+2:00 |
*** 1ère question c'est normal tu n'as pas lancé le script correctement. la fonction 'DO ne tient pas compte du header. >> launch %ctx.r ou dans une console DOS/TTY >> rebol.exe ctx.r *** 2ième question j'ai pas tout compris mais pour changer le prompt dans R2 il faut aller voir du côté de system/console/prompt Dans R3 tu peux pas nativement, ou alors il faut créer ton propre interpréteur de commande. un truc du genre. forever [ prin ">>" print mold try [input]] | |
Philippe | 7-Jul-2011/14:24:27+2:00 |
Salut, Voilà ce que je bidouillerais : Exemple de script principal qui appelle ton contexte dans un autre script lib-interne.r : REBOL [ Title: "tests-externe " Date: 7-Jul-2011 ] h: load/header %lib-interne.r ; tu recuperes directement le header de la lib do %lib-interne.r print h/1/version print ctx/version ; idem au-dessus mais via le ctx print ctx/version-ctx ; le versionning interne du ctx halt et pour %lib-interne.r : REBOL [ Title: "lib interne" Date: 7-Jul-2011 version: 0.0.1 ] ctx: context [ version: system/script/header/version version-ctx: 0.0.2 ] Pour la question 2, je n'ai pas tout compris. Tu veux qu'au chargement de ta lib et de ton contexte, le prompt change ou qu'il y ait une autre console avec un autre prompt ? ===Philippe | |
trigram | 7-Jul-2011/15:23:53+2:00 |
Pour le point 2, je veux le comportement suivant :>> do %rem.r >> rem Welcome to REBOL External Modules version 0.1.0 rem>> | |
Philippe | 8-Jul-2011/9:28:09+2:00 |
Hello,REBOL [ Title: "tests-externe " Date: 8-Jul-2011 ] do %lib-interne.r halt et pour la lib-interne : REBOL [ Title: "REBOL External Modules" Date: 8-Jul-2011 version: 0.0.1 ] ctx: context [ print join {rem Welcome to REBOL External Modules version } system/script/header/version system/console/prompt: "rem>>" {.. puis le contexte ..} ] ===Philippe | |
Didec | 8-Jul-2011/13:33:45+2:00 |
Si j'ai bien tout compris, tu veux charger le script par do, mais ne l'exécuter que quand tu veux. Ca devient une sorte d'interpréteur de commandes. Mais alors il n'est utile que dans la console ! Le script %rem.r : REBOL [ title: "REM" version: 0.1.0 ] rem-ctx: context [ ; on sauve le prompt système et la version du script pendant qu'elle est accessible sys-prompt: system/console/prompt version: system/script/header/version ; on sauve les fonctions redefinis sys-exit: :exit sys-add: :add sys-help: :help ; Init du module init: does [ print join "Welcome in REM v" version system/console/prompt: "rem>>" ; On créé les fonctions de REM set 'add func [ a b] [print [a "+" b "=" a + b]] set 'help does [ print "Commandes disponibles : Add, Help ou Exit" ] set 'exit does [ ; restauration de l'environnement système system/console/prompt: sys-prompt exit: :sys-exit add: :sys-add help: :sys-help ] ] ] ; la fonction de lancement set 'rem does [ rem-ctx/init ] Et une session console l'utilisant : >> do %rem.r >> add 5 4 == 9 >> rem Welcome in REM v0.1.0 rem>>help Commandes disponibles : Add, Help ou Exit rem>>add 5 4 5 + 4 = 9 rem>>exit >> add 5 4 == 9 >> | |
trigram | 8-Jul-2011/14:33:56+2:00 |
Ah ba oui, c'est exactement cela. Très fort ce Didec ! Merci à Philippe et guest2 aussi. | |
Didec | 8-Jul-2011/14:36:19+2:00 |
Ca marche pas mal, mais si tu as un contexte en pleine évolution, il faut penser à mettre le code pour sauver/restaurer chaque fonctions créées qui écraserait celle de Rebol. Voici une solution pour ne pas s'en préoccuper : REBOL [ title: "REM" version: 0.1.0 ] rem-ctx: context [ ; on sauve le prompt système et la version du script pendant qu'elle est accessible sys-prompt: system/console/prompt version: system/script/header/version ; on y sauve les fonctions redéfinies par le module sys-funcs: [] ; Init du module : défini les fonctions de REM et sauve les fonctions existantes du sytème init: has [funcs] [ print join "Welcome in REM v" version system/console/prompt: "rem>>" ; On va créé les fonctions de REM ; pour ça on récupère la listes des "membres" du contexte définis à partir de 'exit = fonctions du module funcs: find first self 'exit clear sys-funcs ; pour chaque word! du contexte foreach f funcs [ ; Si c'est pas un mot du contexte global either unset? get/any in system/words :f [ ; on ajoute le code pour l'en enlever en sortie append sys-funcs reduce ['unset to-lit-word :f] ] [ ; on ajoute le code pour remettre l'original en sortie (attention, on ne peut pas mettre la fonction directement, des fois que ce serait une native! action!) append sys-funcs reduce ['set to-lit-word :f 'pick reduce [get bind :f system/words] 1] ] ; maintenant on met notre fonction en place set to-lit-word :f get in self :f ] ] ; fonction qui permet de quitter REM en restaurant les fonctions originales exit: does [ ; existe dans Rebol ; restauration de l'environnement système system/console/prompt: sys-prompt do sys-funcs ] ; fonctions du module rem: does [ ; n'existe pas dans Rebol ; Evite de relancer REM ce qui re-sauvegarderait les fonctions et donc celles de REM et non plus celles du système print "REM already running !" ] add: func [ a b] [print [a "+" b "=" a + b]] ; existe dans Rebol sub: func [ a b] [print [a "-" b "=" a - b]] ; n'existe pas dans Rebol help: does [ ; existe dans Rebol print "Commandes disponibles : Add, Help ou Exit" ] ] ; la fonction de lancement set 'rem does [ rem-ctx/init ] | |
trigram | 8-Jul-2011/14:57:23+2:00 |
Voici le résultat à ma façon : http://www.rebol.org/view-script.r?script=rem.r Le but est de faire un outil comme gem. LDS de rebol.org est super mais pas du tout adapté pour le néophyte. Enfin, à mon avis. | |
Login required to Post. |