2016-01-30 4 views
2

Est-il possible de déterminer le nombre d'arguments d'une fonction dans Scilab?Comment connaître le nombre d'arguments d'une fonction Scilab

disons que j'ai une fonction comme suit:

function T = test(t,x) 
    T = t*x 
endfunction 

Dans ce cas, je devrais obtenir 2 en sortie. Pour être plus précis, mon but ici est de connaître le nombre d'arguments mais en utilisant uniquement le nom de la fonction.

function N = NumberArgument(F) 
    // F is a function 
    N = .... 
endfunction 

Et donc je veux avoir

a = NumberArgument(test) 
a = 2 

Merci pour votre réponse

Répondre

0

court:

Je pense que ce n'est pas possible.

Long:

Vous voulez obtenir le type signature d'une fonction.

Après un peu de recherche je trouve que les fonctions définies par l'utilisateur et une fonction intégrée (celles codées dans Scilab) ont le même type:

-->deff('[r] = test(a, b)', 'r=a*b'); 
-->type(test) 
ans = 
    13. 
-->type(plot) 
ans = 
    13. 

Je pense que vous ne pouvez pas avoir plus informations sur une fonction que le type. Maintenant, disons que vous voulez la signature de l'intrigue.

Et comme vous pouvez le voir here il existe plusieurs signature (notez que plot() sans arguments n'est pas documentée).

Presque toutes les fonctions Scilab utiliser argn et la possibilité de la signature avec c'est illimited ...

1

Oui, en utilisant argn vous pouvez déterminer le nombre d'entrée & arguments de sortie

function T = test(t,x) 
    [lhs,rhs]=argn(0); 
    disp(rhs); 
    T = t*x; 
endfunction 

En utilisant macrovar, vous pouvez déterminer le nombre de arguments en dehors de la fonction

function N = NumberArgument(F) 
    // F is a function 
    all_vars = macrovar(F); 
    in_vars = all_vars(1); 
    N = size(in_vars, 1); 
endfunction 

disp(NumberArgument(test)) 
+0

Merci pour votre réponse, Toutefois, pour utiliser argn, je dois appeler la fonction avec des arguments réels: par exemple le test (1 , 2). Mon but ici est de connaître le nombre d'arguments mais uniquement en utilisant le nom de la fonction. fonction N = NumberArgument (F) // F est une fonction N = .... endfunction Et donc je veux avoir a = NumberArgument (test) a = 2 –

+0

Est-ce que cette réponse vous aide ? – spoorcc