为什么我们可以';t在MATLAB中同时编码和编译?

为什么我们可以';t在MATLAB中同时编码和编译?,matlab,oop,Matlab,Oop,我有MATLAB R2014b。正如您所知,当我们在其他编程环境(如visual studio)中编写代码时,我们有一个在线编译器,但在MATLAB中,在编辑代码(面向对象的代码)后,我们应该使用清除类,然后再以新的结构运行它。为什么我们在MATLAB中有这种结构?为什么我们没有像visual studio这样的环境 如果您的工作区中有正在编辑的类的任何对象,则需要执行清除类。创建Foo类的对象后,Foo的实现将被缓存。否则,如果在工作区中有Foo类型的对象时更改Foo的代码,则该对象可能会变得

我有MATLAB R2014b。正如您所知,当我们在其他编程环境(如visual studio)中编写代码时,我们有一个在线编译器,但在MATLAB中,在编辑代码(面向对象的代码)后,我们应该使用
清除类
,然后再以新的结构运行它。为什么我们在MATLAB中有这种结构?为什么我们没有像visual studio这样的环境

如果您的工作区中有正在编辑的类的任何对象,则需要执行
清除类。创建Foo类的对象后,Foo的实现将被缓存。否则,如果在工作区中有Foo类型的对象时更改Foo的代码,则该对象可能会变得不一致

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

更新类 重复地
清除类有点烦人使MATLAB不会抱怨定义已更改。
幸运的是,有了R2014b,MathWorks通过实现在解决这一麻烦方面向前迈出了一大步,与早期版本(以及之前的版本)相比,完全内存刷新的条件要少得多

之所以从一开始就不存在这种能力,是因为MATLAB的[PDF]是在七年前部署的。 在MATLAB的生命周期中,这是一个相当新的特性,有很多改进,可能会有很多改进(比如自动更新)


像VisualStudio这样的环境 Visual Studio是一个帮助开发代码及其编译的程序。 每次创建代码库时,都会解析类的行为并覆盖前一个定义(请注意,类在编译时的行为)。 使用编译后的程序或库时,这些对象将被实例化并使用

在MATLAB中,实例化对象时,解析
classdef
中的定义,并将实例加载到内存中。 如果更改了
classdef
并调用了另一个实例化,则旧版本的MATLAB会抱怨,因为MATLAB运行时“在任何时候都只允许类存在一个定义”()。 但是,最新版本会对当前加载到内存中的所有实例执行就地更新


我认为这两个用例显示了行为上的差异:编译后的程序只有一个类定义需要处理,更改签名的唯一方法是重新编译代码。然而,MATLAB可以在内存中已经存在该类的实例的情况下更改该类的签名,并且在我看来,MATLAB的立场是,一次只能存在一个类定义。

因为您似乎在执行OOP?虽然有道理,但我担心你的问题可能不够具体。如果您提供一个小示例,逐步说明您正在做什么,以便其他人尝试复制您的问题,这会有所帮助。下层选民是否愿意评论为什么他们认为这是一个糟糕的问题?你所说的“在线编译器”是什么意思?我对VisualStudio不太熟悉。@horchler感谢您的评论。我编辑了这个问题。我有一个问题:为什么每次我们都要使用
清除类
。每次代码更改后使用
清除类
是非常繁琐的!这是处理这种情况的唯一方法吗?@TroyHaskin谢谢你的评论。我不知道它的正确名称:-)。正如您所知,在像visual studio这样的环境中,当我们同时进行编码时,它将进行编译,在编辑类之后,我们不需要像
清除类那样的任何东西。反正是个翻译。这可能就是它的工作方式。真正的问题可能是:“每次都必须清除有什么好处吗?”。Matlab也使用编译器来完成JIT编译。如果说“Matlab是一种解释性语言”而不是“遵从性语言”(如建议的),则可能更为正确。这两者并不相互排斥。