MATLAB Compiler SDK 生成的编程接口
基于 MATLAB 函数签名的 API
编译器生成两种接口来处理 MATLAB® 函数签名。
Java® 中的标准签名
此接口将每个重载方法的输入参量指定为类
java.lang.Object或任何子类(包括MWArray的子类)的一个或多个输入参量。标准接口将返回值(如果有)指定为MWArray的子类。mlxAPI该接口允许用户将函数的输入指定为对象数组,其中每个数组元素是一个输入参量。类似地,用户还为
mlx接口提供了一个预分配的对象数组来保存函数的输出。输出数组的分配长度决定了所需的函数输出的数量。还可以使用
mlx容器代替输入和输出的对象数组来访问java.util.List接口。请注意,如果使用 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 接口。
标准 API
标准调用接口返回一个或多个 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) |
有两个到 N 个输入参量时的 API | 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 | 输出参量 | 使用标准调用接口,所有输出参量都作为 |
mlx API
考虑具有以下结构的函数:
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 示例生成的签名
对于具体示例,请考虑 myprimes 方法。该方法有一个输入参量,因此编译器在 Java 中生成三个重载方法。
当您将 myprimes 添加到类 myclass 并构建该类时,编译器会生成 myclass.java 文件。下面列出了 myclass.java 的一个片段,以展示 Java 代码中 myprimes 方法的重载实现。
/* 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 接口不是将函数输出作为返回值返回,而是在参量列表中包含输入和输出参量。首先指定输出参量,然后指定输入参量。