Как объявить функцию с аргументом, который является массивом? - PullRequest
3 голосов
/ 07 октября 2011

Мне нужно объявить функцию с 32 аргументами, поэтому было бы удобно указать уникальный аргумент: массив из 32 элементов.Я не нахожу синтаксис для этого, я пробовал все как: функция x = myfunction (str (32)) (и т. Д ...), но безуспешно.

Ответы [ 2 ]

5 голосов
/ 08 октября 2011

В отличие от других языков, MATLAB может принимать матрицы в качестве одного аргумента;так что вы можете просто проверить, что входной аргумент является вектором длины 32:

function x = myfunction(arg)
    if length(arg) ~= 32
        error('Must supply 32 arguments!');
    end

    %# your code here
end

Если это переменное число аргументов, проверьте varargin:

function x = myfunction(varargin)

Но для 32 аргументов рассмотрите возможность использования входной структуры :

function x = myfunction(argStruct)

    if length(fieldnames(argStruct)) ~= 32
        error('not enough arguments!');
    end

Укажите аргументы в структуре, затем передайте структуру:

>> myArgs = struct();
>> myArgs.arg1 = 5;
>> myArgs.arg2 = 7;
>> %#(etc)
>> x = myfunction(myArgs);

Затем в функции вы можете либо напрямую вызывать argStruct.arg1 и т. Д .;или распакуйте его в 32 различных переменных внутри функции.Я бы дал полям описательные имена, чтобы вы не называли их arg1 и т. Д. Внутри своей функции.Для такого количества входных аргументов люди, использующие функцию, вероятно, не будут помнить порядок, в котором ваша функция требует, чтобы они передавали входные данные.Выполнение этого с помощью структуры позволяет пользователям передавать аргументы, не думая о том, в каком порядке определены эти входные данные.

3 голосов
/ 09 октября 2011

Чтобы добавить к удивительному ответу @ strictrude27, похоже, вы можете неправильно понять, как работают объявления функций в Matlab.Вы писали:

function x=myfunction(str(32))

Однако вам не нужно объявлять тип ввода в matlab.Просто дайте ему имя, а затем используйте его.Таким образом, правильный синтаксис для объявления будет:

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