java: fonction eval() - Programmation
Marsh Posté le 29-01-2001 à 13:00:40
je me remerci puisque je me répond ..
Allez aidez moi !!!!
Marsh Posté le 29-01-2001 à 14:30:42
Waouw,
alors là tu nous poses une sacré colle !
Je ne sais pas si c'est vraiment possible à faire en java ce genre de truc...
Tu essaie de faire du java interprêté en quelque sorte ??
Si c'est ça, je sais que beanshell permet de faire un truc du genre (c'est du java interprêté en mode console)
http://www.beanshell.org/
Marsh Posté le 29-01-2001 à 14:44:14
Ouais aidez le, merde !!
Pour une fois qu'il pose une bonne question
Perso, je pense que c'est possible
Tu peut y arriver d'une facon détournée:
j'avais fait pour mon projet de maitrise, un programme java qui créait un fichier .java, le compilait en .class et instanciait l'objet derrière
Mais trop bourrin, il doit y avoir une méthode, regardes dans mon bouquin
Marsh Posté le 29-01-2001 à 15:46:36
je l'ai encore ton bouquin ??!!
Putain, j'ai du le paumer qq part
Par contre j'ai retrouvé ton cd... celui qui va avec ton bouquin !!! D
Mais précise ton truc bourrin !!
Marsh Posté le 29-01-2001 à 15:56:47
je reviens du lien... Pas mal le truc.. Mais ce qui serait cool, ce serait de pouvoir voir le source de leur méthode eval()
Mais je crois pas que ce soit possible
Ptet qu'en passant par les metaclasses ou qqchose com ca
Marsh Posté le 29-01-2001 à 16:12:07
Metaclass, tu va prendre froid
Si, ya le source de beanshell là :
http://www.beanshell.org/bsh-1.1alpha3-src.jar
update.
Y'avait, le ficheir n'esxiste plus. En passant par le CVS par là :
http://cvs.sourceforge.net/cgi-bin [...] =beanshell
On a le code source.
--Message édité par kadreg--
Marsh Posté le 29-01-2001 à 23:11:18
voici un exemple mais c'est en javascript:
b.value=eval("form.prix"+ c.toString() + ".value" );
c.tostring() c'est pour avoir prix1,prix2,prix3...
Tu me dira si ça marche !
a+
Marsh Posté le 30-01-2001 à 01:28:54
Une telle fonction eval() n'est réaliste que dans un langage interprété ; c'est un non-sens dans un langage compilé (je vous rappelle que Java est compilé).
Ceci dit, comme Java est fourni avec tout une librairie de classes, dont le compilateur Java lui-même (puisqu'il est écrit en Java), il est possible de générer une classe, et de le faire compiler (mais il me semble que les fonctions en question sont non documentées. Dans ce cas, il faut aller fouiner dans les sources du JDK). Après, c'est une classe compilée comme une autre...
Marsh Posté le 30-01-2001 à 09:36:20
oki oki.. mais ca aurait ete pratique...
Marsh Posté le 30-01-2001 à 12:44:32
introspection ??!!!
Ca me dit qqche... mais koi ??? me souviens plus
Une petite precision plzzz.
Marsh Posté le 30-01-2001 à 16:38:29
Tu peux toujours jouer avec la reflection.
Mais dans to cas, tu veux appeler la methode dort() sur l'objet toto. Or tu n'a pas de pointeur sur l'object toto, a moins que toto soit une classe et dort soit statique...
l'algo (en supposant toto une classe et dort statique):
s = "toto.dort()"
Class c = Class.forName(s.substring(0, s.indexOf("." ));
Method m = c.getDeclaredMethod(s.substring(s.indexOf("." )), null);
m.invoke(null, null);
Renaud
Marsh Posté le 30-01-2001 à 18:10:44
Merci Renaud... Même si c pas un algo mais du codage
Mais le pb c que toto dans ce cas est une instance...
En fait je souhaite faire un truc du genre:
qd je clique sur un bouton un objet est crée dynamiquement, et possède un identifiant (un nom koi), pour que je puisse l'utiliser plus tard... Mais bien sûr, tout ca sans tableau ni liste ou encore vecteurs !!!!
C'est ca mon plus gros bleme... Mais je crois ke je vais me résigner et prendre un nombre d'objets fixes...
Marsh Posté le 29-01-2001 à 11:00:01
je cherche une methode qui fonctionne comme la fonction
eval(exp)...
Par exemple, si on fait eval("toto"+"1"+".dort();" ) ca nous exécute toto1.dort()...
Merci pour toutes réponses ...
---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"