2009-02-02 12 views
9

Dire que j'avais le code suivant:Existe-t-il un moyen d'appeler une sous-fonction en mode cellule dans matlab?

% Cellmode_subfunction_test.m 
%% Cell 1 
foo(1); 

%% Cell 2 
foo(2); 

%% Definition of the foo subfunction 
function foo(num) 
disp(['num=' num2str(num)]); 

Comment tester la cellule 1 et cellule 2 avec la sous-fonction définie à la fin? Edit: Essentiellement, chacune des cellules de cet exemple effectue des calculs longs, donc je voudrais les tester et les déboguer séparément. J'utilise des sous-fonctions pour extraire et réutiliser des fonctionnalités communes et comme cette fonctionnalité n'est utilisée que dans cette application, je ne veux pas vraiment placer foo dans un fichier m séparé. Editer (2): Je viens de me rappeler que je me souviens vaguement du mode cellulaire fonctionnant uniquement dans les scripts matlab et non dans les fichiers m de fonction et que les sous-fonctions et les fonctions imbriquées ne sont pas autorisées dans ces scripts. Donc ce que je demande n'est probablement pas possible. Bien que la solution de fonction anonyme donnée ci-dessous soit peut-être quelque peu restrictive car elle ne permet que des fonctions d'expression unique, elle a en fait suffi pour ce que je voulais faire et donc je l'ai acceptée comme solution à mon problème.

+0

Désolé, je ne peux pas en dire plus. Juste pour plus de clarté, voulez-vous ajouter des sous-fonctions à un fichier m, qui ne sera utilisé que par ce fichier m, et pour lequel vous ne voulez pas créer un nouveau fichier m? – gnovice

+0

Votre deuxième modification clarifie les choses. C'est vrai, dans les fichiers script, vous ne pouvez pas avoir de sous-fonctions ou de fonctions imbriquées. Les fonctions anonymes sont la seule façon d'aller avec des scripts. La seule autre option est d'enregistrer foo en tant que fichier séparé. – gnovice

Répondre

5

CORRECTION:

J'ai mal compris votre utilisation du mot CELL. Mes excuses. Il semble que vous souhaitiez simplement définir une fonction sur la ligne de commande sans l'enregistrer dans un fichier .m. Pour cela, vous pouvez utiliser des fonctions anonymes:

foo = @(num) disp(['num=' num2str(num)]); 

Ensuite, vous pouvez utiliser "foo" comme vous le feriez pour toute autre fonction.

+1

Ce n'est pas le cas si vous regardez le code fourni. Il s'agit de la possibilité de placer le code MATLAB dans des "cellules" séparées pour faciliter le développement. –

+0

Le code fourni n'est pas très clair sur ce point. Vous ne pouvez pas placer le code MATLAB dans des cellules distinctes d'un tableau de cellules. Vous pouvez placer des poignées de fonction dans un tableau de cellules, comme: fhArray = {@ foo1, @ foo2}. – gnovice

+0

Malheureusement, ce n'est pas ce que j'essaie de faire, mais merci d'essayer d'aider de toute façon. – snth

0

La façon dont je gère normalement cela consiste à utiliser dbstop quelque part dans la fonction principale. Vous avez alors accès à toutes les fonctions auxquelles la fonction principale aurait normalement accès. Si vous travaillez avec l'éditeur ML, utilisez simplement un point d'arrêt au premier appel de foo.

Espérons que ça aide.

Dan

Questions connexes