Как мне эмулировать поведение «включения» в MATLAB?

В MATLAB я могу определить несколько функций в одном файле, только внешняя по отношению к этому файлу видна только первая определенная функция. Кроме того, я могу поместить каждую функцию в отдельный файл и сделать их все глобально видимыми через путь. Я'm написание приложения, управляемого меню, в котором каждый пункт меню выполняет свою функцию. В настоящее время все это в одном большом файле, с которым становится все труднее ориентироваться. Что я'Я хотел бы сделать, это поместить группы связанных функций в отдельные файлы.

Я думаю, что могу сделать что-то вроде этого, поместив все дочерние функции в отдельный каталог, а затем добавив каталог к пути в моей родительской функции, но это выглядит немного грязно и не элегантно.

Кто-нибудь может сделать лучшее предложение?

Примечание: яЯ больше всего знаком с MATLAB 2006, но ям в процессе обновления до MATLAB 2009.

 Andrey Rubshtein06 янв. 2015 г., 18:30

Ответы на вопрос(3)

Может быть, что-то вроде этого,

function foobar
    addpath C:\Include\ModuleX

    %% Script file residing in ModuleX
    some_func();
end

Конечно, ModuleX останется в вашем пути поиска после выхода из foobar. Если вы хотите установить путь по умолчанию без перезапуска, добавьте эту строку:

path(pathdef)

УвидетьADDPATH Больше подробностей.

 Ian Hopkinson17 авг. 2009 г., 12:54
+1, потому что это разумное решение, которое ябуду считать.
 tashuhka14 окт. 2014 г., 15:59
Если файлы находятся в иерархии папок, вы также можете добавить их всеaddpath(genpath(PATH));, Обратите внимание, чтоgenpathКоманда обычно очень медленная.

Вы можете использовать подпапки, которые начинаются с "+" разделить функции на пространства имен.

Например:

Разместить функциюбар" в папке "+ Foo»

function bar()
print('hello world');

Эта функция может использоваться как:

foo.bar() % prints hello world

Более подробную информацию можно найти здесь:

Что ближе всего MATLAB к пространствам имен?

Решение Вопроса

Одно предложение, которое позволит избежать необходимости изменятьMATLAB путь, это использоватькаталог частных функций, Например:

Позволять'скажем, у вас есть функция под названиемtest.m в каталоге\MATLAB\temp\ (который уже находится на пути MATLAB). Если есть локальные функции вtest.m которые вы хотите разместить в своих собственных m-файлах, а вам нужно толькоtest.m чтобы иметь к ним доступ, вы должны сначала создать подкаталог в\MATLAB\temp\ называетсяprivate, Затем поместите отдельные m-файлы локальной функции изtest.m в этомprivate подкаталог.

private подкаталог не 'необходимо добавить к пути MATLAB (на самом деле этоне должен быть добавленным к пути для вещей, чтобы работать должным образом). Только файлtest.m и другие m-файлы в каталоге непосредственно надprivate подкаталог имеет доступ к функциям, которые он содержит. Используя частные функции, вы можете эффективно эмулировать поведениеместные функции (т.е. ограниченная область действия, перегрузка функций и т. д.) без необходимости помещать все функции в один и тот же m-файл (который может стать очень большим для некоторых приложений).

 Dan14 окт. 2014 г., 08:38
Похоже, документы, связанные с этим, были удалены! Являются ли частные каталоги функций устаревшими?
 Ian Hopkinson17 авг. 2009 г., 12:53
Я не'Я знаю, ты мог бы сделать это. Я'Попробую посмотреть, как это получится. По крайней мере, все файлы функций будут спрятаны в тихом уголке!
 gnovice14 окт. 2014 г., 14:45
@ Дан: нет, не устарел. Просто старая, плохая ссылка, так как TMW обновил свои онлайн-документы. Я'отредактировал в новых ссылках.

Ваш ответ на вопрос