【问题标题】:how can I overwrite an object in matlab?matlab如何覆盖对象?
【发布时间】:2016-01-28 14:46:14
【问题描述】:

我有一个循环,我想在其中创建一个对象。它必须为每个循环共享相同的名称。喜欢

for i=1:100
car=car(args(i))
%in this loop do stuff with car
end

问题在于,在第二次迭代中,matlab 尝试访问元素 car(args(i)) 而不是调用 car 类的构造函数。

这是 arg=SS 的错误

Error using subsindex
Function 'subsindex' is not defined for values of class 'SS'.

在 java 中,我会简单地调用 ''new'' 参数,比如

 car=new car(args);
 //do stuff with the car istance
 car= new car(args);
 //do stuff with the new car istance

我无法分配“汽车”数组,因为每个距离都有数百兆字节。我尝试在 matlab 中寻找类似于 new 的关键字,但没有运气。

【问题讨论】:

    标签: java matlab oop


    【解决方案1】:

    问题是你调用你的变量和你的类同名。第一次定义 car=car(); 时,car 开始引用一个实例,而不是类,随后对 car() 的调用将不会调用类构造函数,但会尝试访问对象的索引 @987654324 @(好像它是一个数组,因此出现了关于subsindex 的错误)。

    在 MATLAB 中,您始终必须小心不要隐藏内置函数名称,或者在本例中,隐藏类名称。在 Java 中,数组是用方括号访问的(我猜?),所以没有歧义。

    所以,不要使用car 作为car 类实例的名称。改为mycar=car(args(i))

    【讨论】:

    • 谢谢您,既然您这么说,这很明显......不良的编程习惯永远不会消失,我会选择这个作为未来参考的最佳答案,再次感谢。
    • 开始永远不会太晚:) MATLAB 编程与使用 C++ 或 Java 等低级语言非常不同。像这样的许多微妙之处一开始并不明显。例如,您可以在 JAVA 中轻松调用部分和变量 sum,但这会再次影响 MATLAB 中的内置 sum()。而ij 指的是虚数单位,这可能会导致轻微的混淆。我更喜欢 k-l-m-n 作为循环变量,其他像 ii, jj 等。
    【解决方案2】:

    尝试在每次迭代结束时从工作空间中删除汽车实例:

    clear car
    

    【讨论】:

    • 这确实有效,感谢此修补程序!我会稍微开放一下,看看是否有更标准的方法来做到这一点。再次感谢,有时简单的解决方案是最好的。
    猜你喜欢
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 2019-02-20
    • 2018-02-12
    • 2013-04-11
    • 2016-10-20
    相关资源
    最近更新 更多