有许多基本类方法可以(也应该)定义为允许查询和设置类的内容。其中最基本的是disp
方法这里的disp
每当类应该显示在屏幕上时,Octave都会使用方法。通常,这是不以分号结尾的Octave表达式的结果。如果没有定义这里的方法,那么Octave在显示aclass的内容时不会打印任何内容,这可能会令人困惑。
的一个示例disp
多项式类的方法可能是
function disp (p) a = p.poly; first = true; for i = 1 : length (a); if (a(i) != 0) if (first) first = false; elseif (a(i) > 0 || isnan (a(i))) printf (" +"); endif if (a(i) < 0) printf (" -"); endif if (i == 1) printf (" %.5g", abs (a(i))); elseif (abs (a(i)) != 1) printf (" %.5g *", abs (a(i))); endif if (i > 1) printf (" X"); endif if (i > 2) printf (" ^ %d", i - 1); endif endif endfor if (first) printf (" 0"); endif printf ("\n"); endfunction
为了与Octave图形句柄类保持一致,类还应该定义get
和set
方法。这里的get
方法接受一个或两个参数。第一个自变量是propertificass的对象。如果没有给出第二个参数,那么该方法应该返回一个具有类的所有属性的structure。如果提供了可选的第二个参数,则该参数应为属性名称,并且应检索指定的属性。
function val = get (p, prop) if (nargin < 1) print_usage (); endif if (nargin == 1) val.poly = p.poly; else if (! ischar (prop)) error ("@polynomial/get: PROPERTY must be a string"); endif switch (prop) case "poly" val = p.poly; otherwise error ('@polynomial/get: invalid PROPERTY "%s"', prop); endswitch endif endfunction
类似地,的第一个参数set
方法应该是一个对象,任何其他参数都应该是键/值对。
function pout = set (p, varargin) if (numel (varargin) < 2 || rem (numel (varargin), 2) != 0) error ("@polynomial/set: expecting PROPERTY/VALUE pairs"); endif pout = p; while (numel (varargin) > 1) prop = varargin{1}; val = varargin{2}; varargin(1:2) = []; if (! ischar (prop) || ! strcmp (prop, "poly")) error ("@polynomial/set: invalid PROPERTY for polynomial class"); elseif (! (isreal (val) && isvector (val))) error ("@polynomial/set: VALUE must be a real vector"); endif pout.poly = val(:).'; # force row vector endwhile endfunction
请注意,Octave不实现按引用传递;因此,修改对象需要一个赋值语句,该语句使用set
方法
p = set (p, "poly", [1, 0, 0, 0, 1]);
这里的set
方法利用subsasgn
方法,因此也必须定义此方法。这里的subsasgn
方法将在下一节中进行更深入的讨论(详见索引对象).
最后,用户类可以被认为是一种特殊类型的结构体,它们可以以与结构体相同的方式保存到文件中。例如:
p = polynomial ([1, 0, 1]); save userclass.mat p clear p load userclass.mat
支持的所有文件格式save
和load
支持。在某些情况下,用户类可能包含一个不需要保存的字段,或者一个在保存之前需要初始化的字段。这可以通过saveobj
类的方法。
saveobj
在将类保存到文件之前调用。类似地loadobj
方法是在从文件加载类之后立即调用的,可用于确保将任何删除的字段重新插入到用户对象中。
b =
loadobj (a)
¶一个类的方法,用于在从文件加载对象后对其进行操作。
函数loadobj
当对象a正在加载使用load
作用的使用示例saveobj
可能是向一个保存起来没有意义的对象添加字段。例如
function b = loadobj (a) b = a; b.addmissingfield = addfield (b); endfunction
版权所有 © 2024-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2