空数组类对象的字符串类的名字

19日视图(30天)
SK
SK 2018年8月17日
编辑: SK 2018年8月18日
如果我有一个类称为SomeClass,我可以创建一个空数组SomeClass使用:
arr = SomeClass.empty
有没有一种方法来创建一个空数组,如果我只有字符串“SomeClass”。
5个评论
SK
SK 2018年8月18日
编辑:SK 2018年8月18日
这是非常真实的。通常,人们都可以找到一种更简洁的解决方案没有动态类型,变量名等等。
谢谢你的评论。我稍微棘手的问题涉及建筑的嵌套对象,我意识到这将是更容易让用户使用一个空对象列表调用构造函数,而不是一个字符串列表。
更新:失败!请参阅下面的我的回答。

登录置评。

答案(3)

Guillaume
Guillaume 2018年8月18日
“那些熟悉Matlab就知道这不会工作”
This.elements结束(+ 1)= obj;
的确,但是语义上等价
这一点。元素=[这。元素,obj);
会的。不需要测试的空虚。
1评论
SK
SK 2018年8月18日
编辑:SK 2018年8月18日
啊,我不知道(或者至少不认为,考虑到我可能“特性”含蓄地多次使用),导致另一个耗时的圆形在树林里散步。谢谢。

登录置评。


图像分析
图像分析 2018年8月17日
这样做——从字符串变量命名是一个坏主意。我的意思是,你如何引用该变量之后?你将如何使用它,如果你不知道变量名在运行时之前?看到 这个链接
2的评论

登录置评。


SK
SK 2018年8月18日
编辑:SK 2018年8月18日
事实证明,我不能做我想做什么。最初的问题源于我不想写一个额外的四行代码(丑)。
假设我有一个容器类:
容器
属性
元素;
结束
方法
函数这个容器= ()
结束
函数这=推动(这个,obj)
This.elements结束(+ 1)= obj;
结束
结束
结束
那些熟悉Matlab就知道这不会工作,如Matlab初始化“元素”空“双重”类型和我不能推动另一个对象数组。当然很容易解决这个问题通过重写推动:
这=推动(这个,obj)
如果isempty (This.elements)
这一点。元素= obj;
其他的
This.elements结束(+ 1)= obj;
结束
结束
但这磨碎的感觉,所以我想,为什么不显示“元素”的类型,在构造函数中,如:
函数这=容器(typename_string)
这一点。元素= eval ([typename_string,“空虚”]);
结束
或者:
函数这=容器(empty_array_of_desired_type)
这一点。元素= empty_array_of_desired_type;
结束
这是一个不错的解决方案允许我写干净的推进方法。问题在于当“元素”的对象也可以集装箱(同一层次的不同类型)和“元素”的元素也可以容器——换句话说可能有一定的嵌套。没有办法提供所有正确的空类型各级不使用eval()来动态创建空数组的类型,而且还变得丑陋的检查。
结论:咬紧牙关,忍受一点丑陋的推进方法。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!