Как мне разрешить конфликт имен в MATLAB? - PullRequest
0 голосов
/ 13 июня 2018

Я создал графический интерфейс под названием «стек» в MATLAB.С ним связан файл .m.Этот графический интерфейс несколько раз вызывается другим графическим интерфейсом в той же папке.

Теперь я обнаружил, что " stack " - это встроенная функция в MATLAB, которую мне нужно использовать для чего-то другогов том же рабочем каталоге.Все вызовы функции стека так или иначе вызывают GUI, вызывая скрипт stack.m.

Я не хочу переименовывать это, потому что он используется во многих местах.

Есть ли способиспользовать встроенную функцию без переименования?Какой-нибудь способ ссылки на функцию и скрипт отдельно?

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Отказ от ответственности: Пожалуйста, пожалуйста, пожалуйста, не делайте этого.

Предполагая, что ваш собственный stack.m находится только в пути поиска, потому что он находится в текущей папке, тогда самое простое решение - создать некоторую фиктивную подпапку, перейти к ней, выполнить функцию Matlabs stack (котораяявляется единственным stack в текущем пути поиска) и перейдите назад.

Здесь я привел пример с magic:

function a= magic
n=5;
cd dummy
a= magic(n);
cd ..

, где dummy - имя подпапки.

0 голосов
/ 13 июня 2018

Небольшое изменение ответа Ники для повторяемости: перед тем, как перейти к карте, где хранится ваш stack.m GUI, запустите

builtinStack = @stack();

, который создает дескриптор функции,Таким образом, вы можете вызывать builtinStack(), как предполагается, что вызывается функция MATLAB, без необходимости cd из каталога каждый раз, когда вы хотите его использовать.

Использование builtin, как предлагает hoki , не работает, поскольку встроенные функции определены как

... Такие функции, как "ind2sub", "sub2ind"и т. д. не являются встроенными функциями MATLAB .... Те функции, которые поставляются с MATLAB, но не определены как встроенные функции, могут называться «функциями MATLAB» ...

В ответе Техническая поддержка MathWorks .Это означает, что такие функции, как stack, не являются встроенными в том смысле, что они построены на другом языке, скомпилированы и затем вызваны из MATLAB, но на самом деле написаны на MATLAB и поставляются вместе с выпуском.Основной способ проверить это - набрать edit <functionname>;при отображении только комментариев функция является встроенной, как определено TMW, когда она также показывает код MATLAB, например stack, она не является встроенной согласно приведенному выше определению.

Примервстроенная функция - sum, связанный с ней файл .m выглядит следующим образом:

%SUM Sum of elements.
%   S = SUM(X) is the sum of the elements of the vector X. If X is a matrix,
%   S is a row vector with the sum over each column. For N-D arrays, 
%   SUM(X) operates along the first non-singleton dimension.
%
%   S = SUM(X,DIM) sums along the dimension DIM. 
%
%   S = SUM(...,TYPE) specifies the type in which the 
%   sum is performed, and the type of S. Available options are:
%
%   'double'    -  S has class double for any input X
%   'native'    -  S has the same class as X
%   'default'   -  If X is floating point, that is double or single,
%                  S has the same class as X. If X is not floating point, 
%                  S has class double.
%
%   S = SUM(...,NANFLAG) specifies how NaN (Not-A-Number) values are 
%   treated. The default is 'includenan':
%
%   'includenan' - the sum of a vector containing NaN values is also NaN.
%   'omitnan'    - the sum of a vector containing NaN values
%                  is the sum of all its non-NaN elements. If all 
%                  elements are NaN, the result is 0.
%
%   Examples:
%       X = [0 1 2; 3 4 5]
%       sum(X, 1)
%       sum(X, 2)
%
%       X = int8(1:20)
%       sum(X)             % returns double(210), accumulates in double
%       sum(X,'native')    % returns int8(127), because it accumulates in
%                          % int8 but overflows and saturates.
%
%   See also PROD, CUMSUM, DIFF, ACCUMARRAY, ISFLOAT.

%   Copyright 1984-2015 The MathWorks, Inc.

%   Built-in function.

, то есть из последней строки также видно, что это встроенный файл.в соответствии с определением.Обратите внимание, что все, что содержится в первом «комментарии», видно при наборе help sum;в том смысле, что пустая строка разбивает файл справки.Таким образом, информация об авторских правах и встроенной информации не отображается при простом вводе help sum в командной строке, поэтому для проверки, является ли функция встроенной, вам нужно edit <functionname>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...