方法调用 |
您所在的位置:网站首页 › MATLAB调用函数怎么调用 › 方法调用 |
方法调用 MATLAB® 类支持圆点语法和函数语法来调用方法。本主题演示这两种语法,并描述 MATLAB 如何确定要调用的方法。 圆点语法和函数语法要使用一个参量 arg 调用非静态方法,其中 obj 是定义该方法的类的对象,请使用圆点语法或函数语法。 obj.methodName(arg) methodName(obj,arg)例如,dataSetSummary 存储一组数值数据以及该数据的均值、中位数和范围。该类定义两个方法:showDataSet 显示存储在 data 属性中的当前数据,而 newDataSet 替换 data 的当前值并计算该数据的均值、中位数和范围。 classdef dataSetSummary properties (SetAccess=private) data {mustBeNumeric} dataMean dataMedian dataRange end methods function showDataSet(obj) disp(obj.data) end function obj = newDataSet(obj,inputData) obj.data = inputData; obj.dataMean = mean(inputData); obj.dataMedian = median(inputData); obj.dataRange = range(inputData); end end end创建 dataSetSummary 的一个实例,并调用 newDataSet 来向对象添加数据。使用圆点语法调用 newDataSet。由于 dataSetSummary 是值类,请将结果赋回原始变量以保留更改。 a = dataSetSummary; a = a.newDataSet([1 2 3 4]) a = dataSetSummary with properties: data: [1 2 3 4] dataMean: 2.5000 dataMedian: 2.5000 dataRange: 3调用 showDataSet 方法,但对此调用使用函数语法。 showDataSet(a) 1 2 3 4使用表达式引用方法名称通过将表达式括在括号中,您可以动态调用类方法。 obj.(expression)表达式的计算结果必须为作为方法名称的字符向量或字符串。例如,对于属于类 dataSetSummary 的对象 a,以下两条语句是等效的。 a.showDataSet a.("showDataSet")当与函数语法结合使用时,这种方法不起作用。 对方法调用的结果进行索引对于任何方法,如果针对其返回值定义了点索引方法,例如对象属性或结构体字段名称,那么就可对该方法的结果进行点索引。例如,向 dataSetSummary 类添加新方法 returnSummary,该方法返回结构体中的所有存储数据。 function outStruct = returnSummary(obj) outStruct = struct("Data",obj.data,... "Mean",obj.dataMean,... "Median",obj.dataMedian,... "Range",obj.dataRange); end调用 returnSummary 并使用点索引来返回数据集的中位数。 a.returnSummary.Medianans = 2.5000有关对函数调用结果进行索引的详细信息,请参阅对函数调用结果进行索引。 确定调用哪个方法当使用圆点语法调用方法时,MATLAB 调用由圆点左侧的对象的类定义的方法。例如,如果 classA 和 classB 都定义了名为 plus 的方法,则以下代码始终调用由 classA 定义的 plus 方法。 A = classA; B = classB; A.plus(B)不考虑其他参量。从不调用其他参量的方法,也不调用函数。 在其他语法中,MATLAB 必须确定在给定情况下调用运算符或函数的多个版本中的哪个版本。默认行为是调用与最左侧的参量相关联的方法。在以下两个语句中,都调用由 classA 定义的 plus 方法。 objA + objB plus(objA,objB)不过,当一个对象优先于另一个对象时,此默认行为可以更改。 对象优先级根据类的定义方式,在方法调度时,这些类的对象可以优先于其他对象: 用 classdef 语法定义的类优先于以下 MATLAB 类: double、single、int64、uint64、int32、uint32、int16、uint16、int8、uint8、char、string、logical、cell、struct 和 function_handle。 用 classdef 语法定义的类可以使用 InferiorClasses 属性指定它们相对于其他类的优先级。 在Representing Polynomials with Classes中,DocPolynom 类定义 plus 方法,该方法对 DocPolynom 对象执行加法运算。构造一个 DocPolynom 实例。 p = DocPolynom([1 0 -2 -5]) p = x^3 - 2*x - 5下面的语句向 DocPolynom 实例加上一个双精度值。尽管 double 是 1 + p 中最左侧的参量,但 DocPolynom 类优先于内置的 double 类。以下代码调用 DocPolynom plus 方法来加上多项式。 1 + p ans = x^3 - 2*x - 4您还可以通过在类属性中列出次优先级的类来指定用 classdef 语法定义的类的相对优先级。InferiorClasses 属性赋予所定义的类比作为该属性的参量列出的类更高的优先级。在 classdef 语句中定义 InferiorClasses 属性: classdef (InferiorClasses = {?class1,?class2}) myClass此属性建立所定义的类的相对优先级,并按照列出的类的顺序排列。有关详细信息,请参阅Class Precedence。 相关主题类属性方法特性Class Precedence对子类对象调用超类方法 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |