appel de sous programme par entrée textuelle.

appel de sous programme par entrée textuelle. - Divers - Programmation

Marsh Posté le 07-04-2016 à 21:44:44    

Bonjour,
J'utilise un langage de haut niveau fortement typé, je désire appeler une fonction A à l'entrée du text "A".
Comment procèderiez- vous ?
 
Le mieux que je saurais faire c'est mettre des type accès à fonction englobé avec un nom et éxécuter la fonction de nom "nom" après recherche du nom.
Merci pour votre aide.


Message édité par Profil supprimé le 07-04-2016 à 22:42:49
Reply

Marsh Posté le 07-04-2016 à 21:44:44   

Reply

Marsh Posté le 08-04-2016 à 10:10:41    

En PHP, on peut faire ça. Mais ça peut être dangereux puisque tu donnes accès à l'utilisateur à pleins de fonctions :o


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 08-04-2016 à 10:59:03    

Bonjour rufo.
J'écris avec Ada, mais c'est une autre solution que je viens chercher ici si c'est possible de faire autrement.

Reply

Marsh Posté le 11-04-2016 à 13:15:05    

@localghost
 
Pas compris , peut-tu donner un exemple plus realiste ?
 

Citation :

Le mieux que je saurais faire[...]


Post le code , ça aide .

Reply

Marsh Posté le 11-04-2016 à 13:40:46    

Je pense qu'il parle d'une sorte de gros switch où, en fonction de la chaîne de caractères rentrée (le nom de la fonction), il appelle la fonction portant le même nom.
 
Mais bon, c'est sûr que ça serait long si y'a beaucoup de fonctions :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 11-04-2016 à 16:25:06    

Je voulais faire ce genre de truc avec du VHDL (proche du ada donc), jamais trouvé mieux que le gros switch :/


---------------
sheep++
Reply

Marsh Posté le 12-04-2016 à 06:15:56    

Le but est d'éviter un switch justement.

Reply

Marsh Posté le 12-04-2016 à 07:21:41    

eroge a écrit :

@localghost
 
Pas compris , peut-tu donner un exemple plus realiste ?
 

Citation :

Le mieux que je saurais faire[...]


Post le code , ça aide .


 
 
Bonjour eroge,
Merci de t'intéresser à mon problème.
Loin d'avoir implémenté la solution, voici un début de spécification avec Ada.

Code :
  1. package Libroot.Es.Abstracts is
  2.  
  3.   pragma Pure (Libroot.Es.Abstracts);
  4.  
  5.   type Abstract_Type is abstract tagged null record;
  6.        
  7. end Libroot.Es.Abstracts;


Code :
  1. package Libroot.Es.Abstracts.objects is      
  2.  
  3.   type Object_Type is abstract new Abstract_Type with null record;        
  4.  
  5.   type Object_Access is access all Object_Type'Class;
  6.  
  7.   type Variadic_Array_Type is array (Natural range <> ) of Object_Access;
  8.  
  9.   type Procedure_Access is access
  10.     procedure (Object : in out Object_Type'Class;
  11.                Var    : in Variadic_Array_Type);
  12.      
  13. end Libroot.Es.Abstracts.objects;


Code :
  1. package Libroot.Es.Abstracts.Objects.Entries is
  2.  
  3.   type String_Access is access all String;
  4.  
  5.   type Entry_Type is tagged
  6.      record    
  7.         Proc : Procedure_Access;
  8.         Name : String_Access;
  9.      end record;  
  10. end Libroot.Es.Abstracts.Objects.Entries;


Message édité par Profil supprimé le 12-04-2016 à 07:40:57
Reply

Marsh Posté le 13-04-2016 à 00:37:12    

Bon, finalement j'ai fait comme j'ai dit.
Ca retourn juste une image de l'objet de type chaîne de character;
Ca donne pas mal, puisque au final j'ai ça pour nimporte quel objet et nimporte quel function :
 

Code :
  1. for Entry_Id in Human_Interface.Human_Entries'Range loop
  2.  if Human_Interface.Human_Entries(Entry_Id).Name.all = Predicat then
  3.    Human_Interface.Human_Entries(Entry_Id).Proc (Human_Interface,
  4.                                         Parameters,
  5.                                         Results);
  6.  
  7.    for Result_Id in Results'Range loop                                     
  8.       if Results(Result_Id).all.Initialized then
  9.        Response(Result_Id) := new String ' (Results(Result_Id).all.To_String);
  10.       end if;
  11.    end loop;
  12.    exit;
  13.  end if;
  14. end loop;


 
Merci, si vous avez une autre idée, je suis curieux.

Reply

Marsh Posté le 13-04-2016 à 01:14:06    

Le projet à la naissance, c'est Cyborg écrit avec Ada est c'est viewable here
Ah oui, c'est un système client/serveur mais je n'ai implémenté que le serveur qui disose d'un client qui permet de passer deux commandes : date et hello ; dans une interface text dans un terminal Gnu/Linux avec un beau cadre qui affiche l'heure en temps réel, et qui scinde une long ligne de commande ou de résultat sur plusieurs lignes dans des cadred, ... Normalement.


Message édité par Profil supprimé le 13-04-2016 à 01:29:18
Reply

Marsh Posté le 13-04-2016 à 01:14:06   

Reply

Marsh Posté le 13-04-2016 à 09:39:02    

Purée, c'est moi, ou Jovalise est revenu ? Dès que je vois des topics avec Ada et des phrases que je ne pige pas, je pense à lui :lol:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 13-04-2016 à 11:31:58    

Tu n'es pas le seul à te faire exactement la même remarque ... Mais le style est un poil différent, je trouve, y compris au niveau de la mise en forme du code (qui était  meilleure (dans mon souvenir) avec l'original :bounce: )
 
Je vote pour un copycat ! :o


---------------
On n'est jamais très fort pour ce calcul !
Reply

Marsh Posté le 13-04-2016 à 13:08:30    

Comment ça meilleurs que mon code ?
Aurais-je transigé avec ma discipline ?

Reply

Marsh Posté le 13-04-2016 à 13:14:50    

Je parle de la mise en forme sur le forum, pas du code en lui même ! :non:


---------------
On n'est jamais très fort pour ce calcul !
Reply

Marsh Posté le 13-04-2016 à 14:20:31    

rufo a écrit :

Purée, c'est moi, ou Jovalise est revenu ?

[:gilbert gosseyn]  
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 13-04-2016 à 14:22:29    

C'est bien ce qu'il me semblait... Jovalise, tu as beau changer de pseudo (ça doit bien faire le 3ème), on e reconnais à chaque fois : ton style d'expression est inimitable :D


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 13-04-2016 à 14:26:20    

Non mais ADA + ce style, c'est inimitable [:cytrouille:1]  
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed