Как получить дескриптор переопределенной встроенной функции?
На моем пути Matlab есть обычай zeros
функция. Я хочу сохранить ручку для встроенного zeros
в переменной. Как я могу это сделать?
Думал о @(varargin)builtin('zeros',varargin{:})
, но это, вероятно, замедлит работу из-за сравнения строк.
Кроме того, я заметил, что можно сослаться на diag
как @numel\diag
, но это не похоже на работу с другими встроенными функциями (zeros
особенно).
2 ответа
Ну, это не дает вам точного ответа на ваш вопрос, но может решить проблему:
Я думаю, что это, кажется, хорошее решение:
matlabcentral: как вызвать теневую функцию
С последним постом:
Просто наткнулся на эту проблему и нашел следующее решение: Например, у меня есть пакет инструментов malab svmtrain libsvm:
какой svmtrain -все
C:\ Проекты \ Ихилов \Misc\MVPA\libsvm-мат-3.0-1 \ svmtrain.mexw64
C:\ Program Files \ MATLAB \ R2009b \ toolbox \ bioinfo \ biolearning \ svmtrain.m% Shadowed
Но я могу получить доступ к оригинальной функции с помощью str2func:
org_svmtrain = str2func ([matlabroot '\ toolbox \ bioinfo \ biolearning \ svmtrain'])
а затем просто позвонив:
org_svmtrain (обучение, имена групп)
Предложение № 1
% At the beginning of your script:
rmpath('C:\the\folder\containing\the\custom\zeros');
builtInZeros = @zeros;
addpath('C:\the\folder\containing\the\custom\zeros');
% Calling the custom zeros later:
a = zeros(10, 20);
% Calling the built-in zeros:
b = builtInZeros(10, 20);
Предложение № 2
Поместите эти три строки в ваш файл запуска:
rmpath('C:\the\folder\containing\the\custom\zeros');
builtInZeros = @zeros;
addpath('C:\the\folder\containing\the\custom\zeros');
Предложение № 3
Определенно опасно повторно использовать имя встроенной функции. Это ухудшает читабельность ваших скриптов, делая их намного сложнее поддерживать. Так что если у вас есть контроль над обычаем zeros
функции, затем переименуйте его в другое. Используйте имя, которое описывает, как пользовательская версия отличается от встроенной (например, назовите ее fastZeros
если это быстрее).