我正在使用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中是如何工作的吗?
答案 0 :(得分:3)
是,字段名称are dynamic in MATLAB and can be added or removed at any time。
%// 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使用动态类型,因此无需提前定义任何变量的类型或struct
的字段。
答案 1 :(得分:0)
您需要区分structs,这只是存储数据的便捷方式(suever's answer涵盖的功能)和instances of classes。结构也是类的实例,但所有属性都是 动态属性 的设计,您无需担心它。情况并非总是如此。
例如,如果你在图中用很多gui元素从头开始创建一个gui,你需要在gui元素之间传递很多属性和值。在所有元素的共同点是它们被放置的图形。它的句柄,当前图形的句柄,图形类的实例,可以通过gcf
在gui的每个回调函数中轻松获得。因此,使用此句柄传递gui中的所有信息会很方便。
但你不能这样做:
h = figure(1);
h.myData = 42;
因为图表类不提供dynamic property myData
- 您需要define it:
h = figure(1);
addprop(h,'myData');
h.myData = 42;
我希望现在差异很明显。