exponenta event banner

аргументы

Объявить проверку аргумента функции

Синтаксис

arguments
    argName1 (dimensions) dataType {validators} = defaultValue
    ...
    argNameN ...
end

arguments (Repeating)
    ... 
end

Описание

пример

arguments ... end объявляет входные аргументы для функции. Блок аргументов необязателен. Если включить arguments блок, он должен отображаться перед первой исполняемой строкой функции. Функции могут включать несколько arguments блоки.

Каждый аргумент может иметь одно или несколько ограничений или значение по умолчанию, как показано в следующем синтаксисе:

argName (dimensions) dataType {validators} = defaultValue

  • (dimensions) - Размер ввода, указанный как список двух или более чисел, разделенных запятыми, например (1,2), (3,5,2), или (1,:). Двоеточие допускает любую длину в этом измерении. (dimensions) не может включать выражения.

    Размеры входных данных должны совпадать (dimensions) точно или быть совместимым с размером, указанным (dimensions). Например, (1,:) указывает, что входной вектор должен быть вектором строки 1 на n, но вектор столбца n на 1 совместим. Функция изменяет форму вектора строки, введенного в вектор столбца. Аналогично, размер (2,3) позволяет скалярный ввод, но расширяет ввод до матрицы 2 на 3. Дополнительные сведения см. в разделе Совместимые размеры массивов для основных операций.

  • dataType - тип данных, указанный как имя класса, например double. Входные данные должны иметь указанный тип или тип, который может быть преобразован в этот тип. Например, функция, определяющая double принимает значения типа single и преобразует их в double.

  • {validators} - Список функций проверки, разделенных запятыми, например: mustBeNumeric и mustBeScalarOrEmpty, заключён в фигурные скобки. Ошибка функций проверки, если входные аргументы не соответствуют их условиям. В отличие от этого, dataType, функции проверки не изменяют входные аргументы. Список функций проверки см. в разделе Функции проверки аргументов.

  • defaultValue - Значения по умолчанию должны соответствовать указанному размеру, типу и правилам проверки. Значением по умолчанию также может быть выражение. Указание значения по умолчанию делает аргумент необязательным. Необязательные аргументы должны располагаться после обязательных аргументов в сигнатуре функции и в arguments блок.

Для аргументов «имя-значение» arg использует форму nv.name, где nv является именем структуры в сигнатуре функции и name - имя аргумента в блоке аргументов. Например, определите функцию, которая принимает аргументы «имя-значение», используя структуру с именем options.

y = myFunction(x,options)

В блоке аргументов укажите имена аргументов «имя-значение» в качестве полей:

arguments 
    x
    options.Name1
    options.Name2
end 

Дополнительные сведения об использовании arguments блоки в целом, см. аргументы Блок синтаксис.

arguments (Repeating) ... end объявляет повторяющиеся аргументы.

Например, при создании функции с именем myplot с повторяющимися аргументами X, Y, и style, функция принимает несколько наборов этих трех аргументов, таких как myplot(x1,y1,style1,x2,y2,style2). MATLAB ® создает массив ячеек, содержащий все значения, переданные для этого аргумента.

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

Дополнительные сведения о повторяющихся аргументах см. в разделе Повторяющиеся аргументы.

Примеры

свернуть все

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

function [m,s] = twoStats(x)
    arguments
        x (1,:) {mustBeNumeric}
    end
    m = mean(x,"all");
    s = std(x,1,"all");
end

Вызовите функцию для трехэлементного вектора строки.

a = [1 3 5];
[m,s] = twoStats(a)
m =

     3


s =

    1.6330

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

a = [1 3 5]';
[m,s] = twoStats(a)
m =

     3


s =

    1.6330

При вызове функции с вектором, содержащим нечисловые значения, mustBeNumeric функция проверки выдает ошибку.

a = ["1" "3" "5"];
[m,s] = twoStats(a)
Error using twoStats
Invalid argument at position 1. Value must be numeric.

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

Объявить myRectangle функция с options как имя структуры. Два поля options, LineStyle и LineWidth, являются именами в аргументах имя-значение функции:

function myRectangle(X,Y,options)
    arguments
       X double
       Y double
       options.LineStyle (1,1) string = "-" 
       options.LineWidth (1,1) {mustBeNumeric} = 1
    end
    % Function code
    ...
end

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

myRectangle(4,5)
myRectangle(4,5,LineStyle=":",LineWidth=2)
myRectangle(4,5,LineWidth=2,LineStyle=":")
myRectangle(4,5,LineStyle=":")
myRectangle(4,5,LineWidth=2)

Перед R2021a передайте имена в виде строк или векторов символов и разделите имена и значения запятыми. Оба синтаксиса действительны в более поздних версиях.

Повторяющиеся аргументы - это отдельные аргументы или группы аргументов, которые могут повторяться ноль или более раз в вызове функции. fRepeat функция принимает повторяющиеся группы аргументов x, y, и style. Ограничить входные аргументы x и y к векторам двойных значений или значений, преобразуемых в двойные. Ограничить style к строкам "--" и ":" .

function fRepeat(x,y,style)
    arguments (Repeating)
        x (1,:) double
        y (1,:) double
        style {mustBeMember(style,["--",":"])}       
    end
    
    % Reshape the cell arrays of inputs and call plot function
    z = reshape([x;y;style],1,[]);
    if ~isempty(z)
        plot(z{:});
    end
end

Звонить fRepeat с двумя группами входов. MATLAB создает массив ячеек, содержащий все переданные значения для x, другой массив для значений yи треть для значений style. Затем функция преобразует эти массивы в массив ячеек 1 на 6, z, и передает его в plot.

x1 = 1:10;
y1 = 1:10; 
s1 = ":"; 
x2 = 1:7;
y2 = 1:1.5:10;
s2 = "--";
fRepeat(x1,y1,s1,x2,y2,s2)

Plot showing two lines

Ограничения

  • Блоки аргументов не поддерживаются во вложенных функциях, абстрактных методах или методах деструктора дескрипторов классов.

Подробнее

свернуть все

Поддерживаемые типы данных

Объявления аргументов могут указывать любой класс MATLAB или внешний класс, который поддерживается MATLAB, за исключением классов Java, COM и MATLAB, определенных до версии 7.6 программного обеспечения MATLAB (другими словами, определения классов, которые не используют classdef ключевое слово).

Совет

  • Использование ограничений типа данных может привести к неявному преобразованию входных аргументов. Например:

    function y = myFunction(inputArg1)
        arguments
            inputArg1 (1,1) double
        end
        ...
    Для этой функции, если передать строку "123" в качестве входного аргумента MATLAB преобразует строку в числовое значение 123 типа double.

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

    • Чтобы избежать преобразования строк в числовые значения, используйте mustBeA, mustBeFloat, или mustBeNumeric.

    • Чтобы избежать преобразования числовых значений в строки, используйте mustBeText, mustBeTextScalar, или mustBeNonZeroLengthText.

    • Чтобы избежать преобразования размеров, используйте mustBeVector или mustBeScalarOrEmpty.

Представлен в R2019b