Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 何时需要eval功能?_Matlab_Eval - Fatal编程技术网

Matlab 何时需要eval功能?

Matlab 何时需要eval功能?,matlab,eval,Matlab,Eval,我刚刚阅读了MathWorks的文章,其中描述了避免使用该函数的重要性,并列出了许多eval常用用法的替代方法 读完这篇文章后,我的印象是eval函数既没有用处也没有必要。因此,我的问题是:什么时候需要eval函数?我只找到了一个eval的有用案例,然后是各种情况:当使用内置命令行回调调用函数时(例如,没有的行;或带有disp调用的行),您无法修改。例如,当您得到一个模糊的函数,该函数将大量的内容转储到您的命令窗口中。在这种情况下,最好尝试获取源代码以根据您的需要进行修改,因为使用evalc会影

我刚刚阅读了MathWorks的文章,其中描述了避免使用该函数的重要性,并列出了许多
eval
常用用法的替代方法


读完这篇文章后,我的印象是
eval
函数既没有用处也没有必要。因此,我的问题是:什么时候需要
eval
函数?

我只找到了一个
eval
的有用案例,然后是各种情况:当使用内置命令行回调调用函数时(例如,没有
的行;
或带有
disp
调用的行),您无法修改。例如,当您得到一个模糊的函数,该函数将大量的内容转储到您的命令窗口中。在这种情况下,最好尝试获取源代码以根据您的需要进行修改,因为使用
evalc
会影响您的性能。否则,我没有发现
eval
是最佳解决方案的情况


我在这里写了一个详尽的答案,详细说明了为什么您应该尽量避免
eval

我只找到了一个
eval
的有用案例,然后是各种情况:当使用内置命令行回调调用函数时(例如,不使用
或使用
disp
调用的行),您不能修改它。例如,当您得到一个模糊的函数,该函数将大量的内容转储到您的命令窗口中。在这种情况下,最好尝试获取源代码以根据您的需要进行修改,因为使用
evalc
会影响您的性能。否则,我没有发现
eval
是最佳解决方案的情况


我在这里写了一个详尽的答案,详细说明了为什么您应该尽量避免使用eval:

我在尝试创建多个具有不同名称的数组时已经使用了eval。这不是真正的推荐,但它适用于我的特定应用程序。例如,如果我想有N个矩阵,它们的具体名称是“matrix1”“matrix2”。。“matrixN”,一种解决方案是手动将这些输入为“matrix1=something”。。。“matrixN=somethingelse”。如果N真的很大,这不是理想的。使用eval,您可以设置一个for循环,该循环将更改每个循环上矩阵的名称,并基于相同的N值计算一些值


当然,理想情况下,将它们保存到单元格中会更好,但我需要使用我描述的格式的数组。

在尝试创建具有不同名称的多个数组时,我已经使用了eval。这不是真正的推荐,但它适用于我的特定应用程序。例如,如果我想有N个矩阵,它们的具体名称是“matrix1”“matrix2”。。“matrixN”,一种解决方案是手动将这些输入为“matrix1=something”。。。“matrixN=somethingelse”。如果N真的很大,这是不理想的。使用eval,您可以设置一个for循环,该循环将更改每个循环上矩阵的名称,并基于相同的N值计算一些值


当然,理想情况下,将它们保存到单元格中会更好,但我需要我描述的格式的数组。

情况类似于和其他一些很容易滥用的低级构造。它是可用的,但它的使用是非常糟糕的做法,除了非常罕见的情况外,它们应该避免。就像,只要有不涉及使用它的解决方案,Matlab的符号数学工具箱就广泛地使用
eval
(过去常常直接依赖它来获得现在大多数不推荐的字符串语法)。符号数学很像一种独立的解释语言。
str2num
也在后台使用
eval
(如果在matlab根文件夹中搜索,则会使用100个文件)。这种情况类似于和其他一些很容易被滥用的低级构造。它是可用的,但它的使用是非常糟糕的做法,除了非常罕见的情况外,它们应该避免。就像,只要有不涉及使用它的解决方案,Matlab的符号数学工具箱就广泛地使用
eval
(过去常常直接依赖它来获得现在大多数不推荐的字符串语法)。符号数学很像一种独立的解释语言。
str2num
也在引擎盖下使用
eval
(如果在matlab根文件夹中搜索,也会使用100个文件)。出于这个原因,我还需要
evalc
(遗憾的是,它在八度音阶中不可用)@LuisMendo
evalc
是在GNU Octave 4.2中添加的。出于这个原因,我还需要
evalc
(遗憾地发现它在Octave中不可用)@LuisMendo
evalc
是在GNU Octave 4.2中添加的。如果需要动态命名变量,那么代码中的某个地方就有严重问题。具有动态命名变量也意味着必须动态地读取它们,如果已经使用了
eval
,也可以使用
eval。最好直接使用单元格。是的,正如我所提到的,这种用法根本不推荐,它是为了满足一些已经很糟糕的结构化代码的标准。如果您需要动态命名变量,那么代码中的某个地方就存在严重问题。具有动态命名变量也意味着必须动态地读取它们,如果已经使用了
eval
,也可以使用
eval。最好是直接使用单元格。是的,正如我提到的,这种用法根本不推荐,它是为了满足一些已经很糟糕的结构化代码的标准。