Есть ли способ иметь две функции с тем же именем, но с разными аргументами внутри одного класса в Matlab?Функции перегрузки
ответ
Вкратце: Нет, это невозможно.
Однако, Вы можете имитировать такое поведение:
Очевидно, что поскольку Matlab является динамическим языком, вы можете передать аргументы любого типа и проверить их.
function foo(x)
if isnumeric(x)
disp(' Numeric behavior');
elseif ischar(x)
disp(' String behavior');
end
end
Вы также можете использовать varargin и проверьте количество параметров, а также изменить поведение
function goo(varargin)
if nargin == 2
disp('2 arguments behavior');
elseif nargin == 3
disp('3 arguments behavior');
end
end
спасибо, очень hepfull –
Правильный ответ уже был дан Андреем. Тем не менее, я уже некоторое время экспериментировал с некоторыми экспериментами, и я хотел бы показать, что я считаю другим относительно простым способом, который имеет некоторые преимущества. Кроме того, это метод, который MATLAB использует для своих встроенных функций совсем немного.
Я имею в виду такого рода ключ-значение пары способ передачи аргументов:
x = 0:pi/50:2*pi;
y = sin(x);
plot(x, y, 'Color', 'blue', 'MarkerFaceColor', 'green');
Есть множество способов разбора массив varargin
клеток, но чистый способ сделать это, что я имею найденный до сих пор, использует класс MATLAB inputParser
.
Пример:
function makeSandwiches(amount, varargin)
%// MAKESANDWICHES Make a number of sandwiches.
%// By default, you get a ham and egg sandwich with butter on white bread.
%// Options:
%// amount : number of sandwiches to make (integer)
%// 'butter' : boolean
%// 'breadType' : string specifying 'white', 'sourdough', or 'rye'
%// 'topping' : string describing everything you like, we have it all!
p = inputParser(); %// instantiate inputParser
p.addRequired('amount', @isnumeric); %// use built-in MATLAB for validation
p.addOptional('butter', 1, @islogical);
p.addOptional('breadType', 'white', ... %// or use your own (anonymous) functions
@(x) strcmp(x, 'white') || strcmp(x, 'sourdough') || strcmp(x, 'rye'));
p.addOptional('toppings', 'ham and egg', @(x) ischar(x) || iscell(x))
p.parse(amount, varargin{:}); %// Upon parsing, the variables are
%// available as p.Results.<var>
%// Get some strings
if p.Results.amount == 1
stringAmount = 'one tasty sandwich';
else
stringAmount = sprintf('%d tasty sandwiches', p.Results.amount);
end
if p.Results.butter
stringButter = 'with butter';
else
stringButter = 'without butter';
end
%// Make the sandwiches
fprintf(['I made you %s %s from %s bread with %s and taught you ' ...
'something about input parsing and validation in MATLAB at ' ...
'the same time!\n'], ...
stringAmount, stringButter, p.Results.breadType, p.Results.toppings);
end
(косые после комментариев, потому что ТАК не поддерживает подсветку синтаксиса MATLAB)
дополнительными преимуществами данного способа являются:
- Возможность установки по умолчанию (например, Python, где вы можете установить в функции подпись arg=val
)
- Возможность корректной проверки ввода
- Вы только должны помнить имена опций, а не их порядок, как порядок не имеет значения
МИНУСЫ:
- там могут быть некоторые накладные расходы, которые могут стать существенными при выполнении многих вызовов функций, а не многое другое (не проверено)
- вы должны использовать Results
свойства из inputParser
класса вместо того, чтобы использовать переменные непосредственно
- 1. Ошибка перегрузки функции типаScript
- 2. перегрузки функции и наследование
- 3. Машинопись функции перегрузки стрелка
- 4. C++ шаблон функции перегрузки
- 5. Шаблон разрешения перегрузки функции
- 6. «Нет экземпляра функции перегрузки»
- 7. шаблон функции указатель перегрузки
- 8. шаблон функции перегрузки лязг ++
- 9. Функции перегрузки в MATLAB
- 10. node.js - функции перегрузки
- 11. F #: Функции перегрузки
- 12. Вопросы функции перегрузки C++?
- 13. Вызов другой функции перегрузки
- 14. Приоритет перегрузки функции C++
- 15. Перегрузки операторной функции
- 16. функции разрешения и шаблон перегрузки
- 17. шаблон функции перегрузки с сопзЬ
- 18. C++ шаблонной функции перегрузки правила
- 19. Перегрузки функции с производными классами
- 20. Возьмите адрес перегрузки шаблона функции
- 21. перегрузки функции шаблона с автоматическим
- 22. Эмуляция функции перегрузки в Scala
- 23. оператор потока перегрузки для функции
- 24. Оператор перегрузки для вызова функции
- 25. перегрузки функции для связки типов
- 26. Вложенные функции перегрузки в Swift
- 27. Функции перегрузки с различными @QueryParams
- 28. Как отличить перегрузки шаблонной функции
- 29. Как устранить неоднозначность перегрузки функции
- 30. Перегрузки шаблон функции в CPP
Связанных/Возможные дубликатов: (http://stackoverflow.com/q/ [Как перегрузить определенный пользователь функцию в Matlab?] 7217653/52738), [возможно перегрузить функцию в классе matlab?] (Http://stackoverflow.com/q/8087155/52738) – gnovice