主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

MATLAB Compiler SDK 生成的编程接口

基于 MATLAB 函数签名的 API

编译器生成两种接口来处理 MATLAB® 函数签名。

  • Java® 中的标准签名

    此接口将每个重载方法的输入参量指定为类 java.lang.Object 或任何子类(包括 MWArray 的子类)的一个或多个输入参量。标准接口将返回值(如果有)指定为 MWArray 的子类。

  • mlx API

    该接口允许用户将函数的输入指定为对象数组,其中每个数组元素是一个输入参量。类似地,用户还为 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输出的数目

一个整数,表示您希望该方法返回的输出数量。如果不想返回任何参量,请省略此参量。

numArgsOut 的值必须小于或等于 MATLAB 函数 nargout

numArgsOut 参量必须始终是列表中的第一个参量。

In1, In2, ...InN必需的输入参量

参量列表中 numArgsOut 之后的所有参量都是被调用方法的输入。

首先指定所有必需的输入。每个必需的输入必须属于 MWArray 类或从 MWArray 派生的任何类。

varargin可选输入

如果您的 MATLAB 代码使用 varargin 输入,您还可以指定可选输入:列出可选输入,或将它们放在 Object[] 参量中,并将数组放在参量列表的最后。

Out1, Out2, ...OutN输出参量

使用标准调用接口,所有输出参量都作为 MWArray 数组返回。

mlx API

考虑具有以下结构的函数:

function [Out1, Out2, ..., varargout] = foo(In1, In2, ..., 
                          InN, varargin)
编译器生成以下 API 作为 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 接口不是将函数输出作为返回值返回,而是在参量列表中包含输入和输出参量。首先指定输出参量,然后指定输入参量。