为什么我们不能在MATLAB中同时编码和编译?

时间:2015-01-08 19:21:07

标签: matlab oop

我有MATLAB R2014b。正如您所知,当我们在Visual Studio等其他编程环境中编写代码时,我们有一个在线编译器,但在编辑代码(面向对象代码)后在MATLAB中,我们应该在使用新结构运行之前使用clear classes。为什么我们在MATLAB中有这个结构?为什么我们没有像visual studio那样的环境!?

2 个答案:

答案 0 :(得分:2)

更新课程

有必要反复clear classes;让MATLAB不要抱怨定义已经改变,这有点烦人。 幸运的是,使用R2014b,MathWorks通过实现Automatic Updates for Modified Classes向前迈出了一大步,通过实现R2014a,与早期版本(current object model和之前的版本)相比,完全内存刷新的条件要少得多。 / p>

为什么这种能力从一开始就不存在的原因是MATLAB的compiled [PDF]仅在七年前部署。 在MATLAB的生命周期中,这是一个相当新的功能,有很多改进,可能会,并且可能会进行(如自动更新)。


像Visual Studio

这样的环境

Visual Studio是一个帮助开发代码及其编译的程序。 每次代码库为need not be fixed时,都会解析类的行为并覆盖前一个定义(请注意编译时类docs的行为)。 当使用编译的程序或库时,然后实例化并使用这些对象。

在MATLAB中,当您实例化一个对象时,将解析classdef中的定义,并将一个实例加载到内存中。 如果classdef被更改并且另一个实例被调用,则旧版本的MATLAB会抱怨,因为MATLAB运行时"只允许一个类的一个定义随时存在" (save a few exceptions)。 但是,最新版本会对当前加载到内存中的所有实例{{3}}执行就地更新。

我认为这两个用例显示了行为上的差异:编译的程序只有一个类定义要处理,更改签名的唯一方法是重新编译代码。然而,MATLAB可以让类签名发生变化,同时该类的实例已经存在于内存中,而MATLAB的立场就是说,在我看来,一次只能存在一个类定义。< / p>

答案 1 :(得分:0)

如果您在工作区中编辑了任何类的对象,则需要执行clear classes。一旦创建了类Foo的对象,就会缓存Foo的实现。否则,如果在工作空间中有类型为Foo的对象时更改Foo的代码,则该对象可能会变得不一致。

此外,MATLAB使用解释器,而不是编译器。