¿Es posible definir más de una función por archivo en MATLAB y acceder a ellas desde fuera de ese archivo?



3 Answers

En general, la respuesta a su pregunta es no, no puede definir más de una función visible externamente por archivo. Sin embargo, puede devolver identificadores de función a funciones locales, y una forma conveniente de hacerlo es convertirlos en campos de una estructura. Aquí hay un ejemplo:

function funs = makefuns
  funs.fun1=@fun1;
  funs.fun2=@fun2;
end

function y=fun1(x)
  y=x;
end

function z=fun2
  z=1;
end

Y así es cómo podría usarse:

>> myfuns = makefuns;
>> myfuns.fun1(5)    
ans =
     5
>> myfuns.fun2()     
ans =
     1
Question

Cuando estaba estudiando para obtener mi título universitario en EE, MATLAB requería que cada función se definiera en su propio archivo, incluso si era de una sola línea.

Estoy estudiando para un postgrado ahora, y tengo que escribir un proyecto en MATLAB. ¿Sigue siendo un requisito para las versiones más nuevas de MATLAB?

Si es posible poner más de una función en un archivo, ¿hay alguna restricción para esto? Por ejemplo, ¿se puede acceder a todas las funciones del archivo desde fuera del archivo, o solo a la función que tiene el mismo nombre que el archivo?

Nota: Estoy usando la versión R2007b de MATLAB.




Defino múltiples funciones en un archivo .m con Octave y luego uso el comando dentro del archivo .m donde necesito hacer uso de las funciones de ese archivo:

source("mycode.m");

No estoy seguro si esto está disponible con Matlab.

octave:8> help source
'source' is a built-in function

 -- Built-in Function:  source (FILE)
     Parse and execute the contents of FILE.  This is equivalent to
     executing commands from a script file, but without requiring the
     file to be named `FILE.m'.



A partir del R2017b, esto no es oficialmente posible. La documentación relevante establece que:

Los archivos de programa pueden contener múltiples funciones. Si el archivo contiene solo definiciones de funciones, la primera función es la función principal, y es la función que MATLAB asocia con el nombre del archivo. Las funciones que siguen la función principal o el código de script se llaman funciones locales. Las funciones locales solo están disponibles dentro del archivo.

Sin embargo, las soluciones sugeridas en otras respuestas pueden lograr algo similar.




Me gusta mucho la respuesta de SCFrench: me gustaría señalar que se puede modificar fácilmente para importar las funciones directamente al espacio de trabajo utilizando la función de asignación. (Hacerlo así me recuerda mucho a la forma de hacer las cosas de "importar x de y" de Python)

function message = makefuns
  assignin('base','fun1',@fun1);
  assignin('base','fun2',@fun2);
  message='Done importing functions to workspace';
end

function y=fun1(x)
  y=x;
end

function z=fun2
  z=1;
end

Y luego se usa así:

>> makefuns
ans =
Done importing functions to workspace

>> fun1(123)
ans =
   123

>> fun2()
ans =
     1



Related