Bonjour,

Mon problème est: comment comparer deux function_handles.
L'un est enregistré dans ue variable et l'autre est livré tel quel
à la fonction de comparaison (isequal par exemple)

Voilà le code que j'ai inscrit dans une fonction.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
%Pointer1 est un pointeur de fonction, qui a été initialisé par une fonction 
%externe: getValue. 
%Ce pointeur doit s'appeler normalement
% très précisemment:
%@functionOfPOinter1
 
if (isequal(Pointer1,@functionOfPointer1))
<div style="margin-left:40px">%... texte</div>else
 
%si l'égalité n'est pas vérifiée, afficher les valeurs mises en jeu
<div style="margin-left:40px">disp(' the pointer1 is equal to');
%la valeur telle qu'elle a du être initialisée(on sait jamais,
% la fonction peut être mal ficelée
getValue('pointer1')
%encore, je vérifie que j'ai bien attribué un function_handle
disp(' the pointer1 is a function handle, yes or no:');
isa(pointer1,'function_handle')
%là, encore, vérification
disp(' @functionOfPointer1 is a function handle, yes or no:');
isa(@functionOfPointer1,'function_handle')
%Maintenant, déterminr à nouveau si le deux pointeurs sont égaux
disp('isequal(pointer1,@functionOfPointer1) is equal to ' );
isequal(pointer1,@functionOfPointer1)</div>end
Mon but est de faire marcher le code après la condition "if". tout le code
dans la boucle "else" devait m'aider à comprendre pourquoi la condition
du "if"n'est pas vérifiée.

Voici la réponse de Matlab
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
the pointer1 is equal to
ans = 
    @functionOfPointer1
 the pointer1 is a function handle, yes or no:
ans =
     1
 @functionOfPointer1 is a function handle, yes or no:
ans =
     1
isequal(pointer1,@functionOfPointer1) is equal to 
ans =
     0
Ma question est la suivante:
comment comparer deux function_handles?? si la fonction isequal ne marche pas,
je vois pas.
Par ailleurs, est-ce que ca plante à cause d'une erreur bête que je n'ai pas vue?

merci d'avance
adriano