对于我的对象构造函数,我的第一个参数是一个与我的类的属性长度相对应的值数组。我想遍历该输入数组,并使用数组中的相应值初始化每个属性。
function obj = Waveform(required, options, varargin)
objProperties = reshape(properties(obj), [1, size(properties(obj))]);
for index = 1:size(required, 2)
set(obj, objProperties(:, index), required(:, index));
end
end
我知道循环有效,但我不知道如何或是否可以通过上述方式进行初始化。
在当前状态下,程序返回以下错误:找不到Waveform类的“设置”方法。
答案 0 :(得分:1)
如果您的类未实现set
方法,则不能使用set(obj, ...)
来实现。如果您的类是从a built-in class that implements them派生/继承的,则默认情况下,您只会有set/get
个方法。
如果您不想继承这些类之一,也不想自己实现set/get
方法,则可以使用dynamic field referencing来实现。这是一个示例类:
classdef Waveform
properties
a
b
c
end
methods
function obj = Waveform(required)
objProperties = properties(obj);
for index = 1:numel(required)
obj.(objProperties{index}) = required(index);
end
end
end
end
您可以按照以下步骤创建新对象:
>> obj = Waveform([1 2 3])
obj =
Waveform with properties:
a: 1
b: 2
c: 3
>> obj = Waveform([1 2]) % Only pass 2 values...
obj =
Waveform with properties:
a: 1
b: 2
c: [] % ...and the third property is not initialized
但是,这似乎是一种非常脆弱的方法,如果您通过添加或删除属性来修改类,将很难维护并且很容易中断。我建议将属性值作为单独的参数传递给您的constructor,或者可能使用input validation methods。