您清楚地询问了代码的运行时。将变量分配为
evalin ()
是一个缺点,正如别人已经解释过的。这样设计程序更快,所有使用的变量都由输入和输出参数提供。这就是为什么几乎Matlab工具箱中的所有函数都使用这种方法的原因。(例外:
disp
和
保存
,通过使用
的名字
而不是变量的值。)
Stephen Cobeldick在他的评论中指出了一个重要的观点:
evalin ()
使代码难以调试和维护。如果您的代码有用,您将在其他应用程序中使用它。随着时间的推移,这样的代码将会增长。在我的例子中,一些包含20行代码的小脚本(用于修复从Excel文件中获取的一些输入)自1999年以来增长到227000行Matlab代码。现在,假设一些函数使用存储在名为“A1”的基本工作空间中的变量,并且该程序的GUI是打开的,而一些用户在命令窗口中运行脚本,这些脚本意外地使用“A1”作为变量名。这将导致意外的输出,几乎不可能调试它。
在基本工作区中存储变量并通过
evalin
是严重问题的根源。调试可能需要一个小时,或者在我的情况下需要几个星期,因为我将不得不访问实验室,它使用我的软件,他们将无法复制问题,直到其他用户再次运行它的脚本。即使运行时
evalin ()
会比其他方法快几微秒,不稳定的代码设计会大大降低获得结果的时间。
记住:我们编写代码是为了解决问题。问题解决之前的时间是总和:
T_solved = t_designing + d_programming + t_documentation +...
T_debugging + t_优化+ t_runtime
试图提高处理速度,而代码仍然是脆弱的,对evalin的被称为“过早优化”,这是一个常见的原因,不稳定和结果是不可用的代码。
你的问题表明,通过学习如何高效地设计代码,是时候进入下一阶段的编程了。软件工程很重要,但对太多的科学家来说,它或多或少是未知的。我见过很多为PhD而开发的程序,它们是一堆没有文件记录的脚本,必须按照特定的顺序调用才能获得某些结果。一旦博士完成,作者丢失了写需要的订单的便利贴,这个软件就没用了,值得马上删除。
我的回答:
不要试图改进运行时,而是花时间重构完整的代码,以便所有变量要么由输入提供,要么由输出提供,或者通过使用内联函数共享变量。请考虑,好的代码将在其他项目中重用,这只有在功能具有良好设计和文档化的接口的情况下才有可能。
evalin ()
是杂乱代码的安全指示符,所以要想办法避免它。