Компилятор генерирует два вида интерфейсов, чтобы обработать MATLAB® функциональные подписи.
Подпись standard на Java®
Этот интерфейс задает входные параметры для каждого перегруженного метода как один или несколько входных параметров класса java.lang.Object
или любой подкласс (включая подклассы MWArray
). Стандартный интерфейс задает возвращаемые значения, если таковые имеются, как подкласс MWArray
.
mlx
API
Этот интерфейс позволяет пользователю задавать входные параметры к функции как Объектный массив, где каждый элемент массива является одним входным параметром. Точно так же пользователь также дает mlx
соедините интерфейсом с предварительно выделенным Объектным массивом, чтобы содержать выходные параметры функции. Выделенная длина выходного массива определяет количество желаемых функциональных выходных параметров.
mlx
к интерфейсу можно также получить доступ с помощью java.util.List
контейнеры вместо Массивов объектов для вводов и выводов. Обратите внимание на то, что, если контейнеры Списка используются, выход List передал в, должен содержать много элементов, равных желаемому количеству функциональных выходных параметров.
Например, это было бы неправильным использованием:
java.util.List outputs = new ArrayList(3); myclass.myfunction(outputs, inputs); // outputs 0 elements!
Правильное использование:
java.util.List outputs = Arrays.asList(new Object[3]); myclass.myfunction(outputs, inputs); // list has 3 elements
Как правило, вы используете стандартный интерфейс, когда это необходимо, чтобы вызвать функции MATLAB, которые возвращают единый массив. В большинстве других случаев используйте mlx
интерфейс.
Стандартный интерфейс вызова возвращает массив одного или нескольких MWArray
объекты.
Стандартный API для родовой функции ни с одним, один, больше чем один или переменное количество аргументов, показывают в следующей таблице.
Аргументы | API, чтобы использовать |
---|---|
Типовая функция MATLAB | function [Out1, Out2, ..., varargout] = foo(In1, In2, ..., InN, varargin) |
API, при отсутствии входных параметров | public Object[] foo(int numArgsOut) |
API, если существует один входной параметр | public Object[] foo(int numArgsOut, Object In1) |
API, если существует два к N входные параметры | public Object[] foo( int numArgsOut, Object In1, Object In2, ... Object InN ) |
API, если существуют дополнительные аргументы, представленные varargin аргумент | public Object[] foo( int numArgsOut, Object in1, Object in2, ..., Object InN, Object varargin ) |
Следующая таблица показывает детали об аргументах для этих выборок стандартных подписей.
Аргумент | Описание | Детали об аргументе |
---|---|---|
numArgsOut | Количество выходных параметров | Целое число, указывающее на количество выходных параметров, вы хотите, чтобы метод возвратился. Чтобы не возвратить аргументы, не используйте этот аргумент. Значение
|
In1, In2, ...InN | Необходимые входные параметры | Все аргументы, которые следуют Задайте все необходимые входные параметры сначала. Каждый необходимый вход должен иметь класс |
varargin | Дополнительные входные параметры | Можно также задать дополнительные входные параметры, если код MATLAB использует |
Out1, Out2, ...OutN | Выходные аргументы | Со стандартным интерфейсом вызова все выходные аргументы возвращены как массив |
Рассмотрите функцию со следующей структурой:
function [Out1, Out2, ..., varargout] = foo(In1, In2, ..., InN, varargin)
mlx
интерфейс:public void foo (List outputs, List inputs) throws MWException; public void foo (Object[] outputs, Object[] inputs) throws MWException;
Для определенного примера рассмотрите myprimes
метод. Этот метод имеет один входной параметр, таким образом, компилятор генерирует три перегруженных метода на Java.
Когда вы добавляете myprimes
к классу myclass
и создайте класс, компилятор генерирует myclass.java
файл. Фрагмент myclass.java
описан ниже, чтобы показать перегруженные реализации myprimes
метод в коде Java.
/* mlx interface - List version */
public void myprimes(List lhs, List rhs) throws MWException
{
(implementation omitted)
}
/* mlx interface - Array version */
public void myprimes(Object[] lhs, Object[] rhs)
throws MWException
{
(implementation omitted)
}
/* Standard interface - no inputs*/
public Object[] myprimes(int nargout) throws MWException
{
(implementation omitted)
}
/* Standard interface - one input*/
public Object[] myprimes(int nargout, Object n)
throws MWException
{
(implementation omitted)
}
Стандартный интерфейс задает входные параметры к функции в рамках списка аргументов и выходных параметров как возвращаемые значения. Вторая реализация демонстрирует feval
интерфейс, третья реализация показывает интерфейс, который будет использоваться, при отсутствии входных параметров и четвертых показов реализация, которая будет использоваться, если существует один входной параметр. Вместо того, чтобы возвращать функциональные выходные параметры как возвращаемое значение, feval
интерфейс включает оба аргумента ввода и вывода в список аргументов. Выходные аргументы задаются сначала, сопровождаются входными параметрами.
Для получения дополнительной информации об интерфейсах, смотрите Интерфейсы программирования, Сгенерированные MATLAB Compiler SDK.