2

我在 MATLAB 中使用其他人的代码,看起来他正在创建结构,只是使用字段名称而不声明它们。这就是它在 MATLAB 中的工作方式,您只是开始使用您选择的不区分大小写的字段名称吗?

所以,例如,他有这样的事情:

classdef Emitter
   properties
      transients=[];
   end
end

... some other class
   methods
      function sound=makeSound()
         emitterthing.transients.receivedIntensity = 100
         emitterthing.transients.frequency = 500
      end
   end 

换句话说,他只是开始编造字段名称并为它们分配值,而不声明字段名称或它们的类型。

这就是它在 MATLAB 中的工作方式吗?

4

2 回答 2

3

是的,字段名称在 MATLAB 中是动态的,可以随时添加或删除

%// Construct struct with two fields
S = struct('one', {1}, 'two', {2});

%// Dynamically add field
S.three = 3;

%// Remove a field
S = rmfield(S, 'two')

唯一的限制是,如果您有一个结构数组,它们都必须具有相同的字段名称。

%// Create an array of structures
S(1).one = '1.1';
s(2).one = '1.2';

%// Dynamically add a new field to only one of the structs in the array
s(1).two = '2.1';

%// s(2) automatically gets a "two" field initialized to an empty value
disp(s(2))

%//     one: '1.2'
%//     two: []

此外,MATLAB 使用动态类型,因此无需提前定义任何变量的类型或 a 的字段struct

于 2016-05-19T03:01:38.743 回答
0

您需要区分只是存储数据的便捷方式的结构( suever 的答案涵盖的功能)和类的实例。结构也是类的实例,但所有属性都是设计为动态属性,您无需担心。情况并非总是如此。

例如,如果您要从头开始创建一个图形,其中包含许多 gui 元素,则需要在 gui 元素之间传递许多属性和值。所有元素的共同点是它们所在的图形。它的句柄,当前图形的句柄,图形类的一个实例,可以gcf在gui的每个回调函数中轻松获取。所以使用这个句柄在 gui 中传递所有信息会很方便。

但你不能只做:

h = figure(1);
h.myData = 42;

因为图形类不提供动态属性 myData- 您需要定义它

h = figure(1);
addprop(h,'myData');
h.myData = 42;

我希望现在区别很明显。

于 2016-05-19T06:21:24.107 回答