将值指定为数组时,如何设置类属性?

时间:2019-03-28 15:16:48

标签: arrays matlab properties iteration

对于我的对象构造函数,我的第一个参数是一个与我的类的属性长度相对应的值数组。我想遍历该输入数组,并使用数组中的相应值初始化每个属性。

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类的“设置”方法。

1 个答案:

答案 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