我们的软件,我们称之为我的,依赖于另一个模拟软件,我们称之为 Sim 。不幸的是, Sim 中存在一个错误。
为了帮助 Sim 的调试过程,我需要提供模拟文件及其输入。
这意味着传递我的 MATLAB对象及其类。不幸的是,这些课程是机密材料。那么有没有办法,我可以向下转换(?)或将对象转换回结构?这将提供 Sim 的输入值,但不会向 Sim 的所有者显示这些值的派生方式。
感谢。
答案 0 :(得分:2)
struct
函数可以将对象转换为struct。
struct(obj)
答案 1 :(得分:1)
我不确定我是否了解您的用例,但我需要做类似的事情。我通过Matlab控制实验。每个设备都通过一个对象(一些自定义类的实例)来控制。每个设备的状态存储在其对象的公共属性中。我偶尔会想保存我的设备状态,这意味着我必须递归遍历所有公共属性,并将所有数据放入结构中。
也许代码最能说明问题。
function output_struct = obj2struct(obj)
% Converts obj into a struct by examining the public properties of obj. If
% a property contains another object, this function recursively calls
% itself on that object. Else, it copies the property and its value to
% output_struct. This function treats structs the same as objects.
%
% Note: This function skips over serial, visa and tcpip objects, which
% contain lots of information that is unnecessary (for us).
properties = fieldnames(obj); % works on structs & classes (public properties)
for i = 1:length(properties)
val = obj.(properties{i});
if ~isstruct(val) && ~isobject(val)
output_struct.(properties{i}) = val;
else
if isa(val, 'serial') || isa(val, 'visa') || isa(val, 'tcpip')
% don't convert communication objects
continue
end
temp = obj2struct(val);
if ~isempty(temp)
output_struct.(properties{i}) = temp;
end
end
end