Matlab 中@的用法主要有:函数句柄、函数表达式、调用父类以及类文件夹。
前两种有很多介绍,后两种涉及类,介绍的人很少。前2个例子,参考了其它博客,总感觉@用法都写的不全,所以在此基础上,补充了3、4 。感兴趣的,可以去看看徐潇编著的《matlab面向对象编程-从入门到设计模式》(注:不是广告、不是推销、纯粹的是觉得这本书很不错吗,想推荐给各位)。
1. 充当函数句柄的作用
用法:变量1 = @+(内置)函数名;
调用:变量2 = 变量1(参数1,参数2,……);
注:输入参数是上一行设置是的函数输入参数!,(内置)函数是定义好的(系统定义、自己定义都行)
>> f = @cos
f =包含以下值的 function_handle:@cos
>> f(pi/6)
ans =0.8660
>> f(pi/3)
ans =0.5000
2. 构造函数表达式
用法:变量名=@(输入参数列表)运算表达式
例如:构造一个一元二次方程函数x2+4x+4=y,求解x=3、x=4时,y的值?
>> y = @(x)(x.^2+4*x+4)
y =包含以下值的 function_handle:@(x)(x.^2+4*x+4)
>> y([3,4])
ans =25 36
3. 调用父类(基类)
要调用超类方法,方法名称'XXX'必须与子类方法'***'的名称匹配
比如:新建一个Ponit3D类,该类继承的父类是Point2D。(代码来源于徐潇编著的《matlab面向对象编程-从入门到设计模式》)
classdef Point2D < handle % 定义父类 properties x; y; end methods function Obj = Point2D(x0,y0) Obj.x = x0; Obj.y = y0; end function print(Obj) disp(['x=',num2str(Obj.x)]); disp(['y=',num2str(Obj.y)]); end function Sum = add(Obj) Sum = Obj.x+Obj.y; end end end | classdef Point3D < Point2D % 定义子类 properties z; end methods function Obj = Point3D(x0,y0,z0) Obj = Obj@Point2D(x0,y0); Obj.z = z0; end function print(Obj) print@Point2D(Obj) disp(['z=',num2str(Obj.z)]); end function Sum = add(Obj) temp = add@Point2D(Obj); Sum = temp+Obj.z; end end end |
本代码共有三个@使用实例(红色标注)。
用法:父子类同名方法(或对象)@父类名称
注:“要调用超类方法,方法名称'Obj'必须与子类方法print'的名称匹配”
如果将Poni3D类中方法名称'Print'改成'Print1',则会显示'print1' 不是基类 'Point2D' 的可访问方法。因此,需注意的是,子类调用父类的方法时,名称必须与父类匹配。
4. 存放类文件夹
用法:文件夹命名:@+类名
eg:@Point2D
不足之处,敬请斧正!
路漫漫其修远兮,吾将上下而求索!