虽然eval
函数非常强大和灵活,它并不总是编程问题的最佳解决方案。代码调用eval
与使用其他函数或语言结构的代码相比,通常效率较低,且更难以阅读和调试。例如:
MATLAB®在第一次运行时编译代码,以提高以后运行时的性能。但是,由于代码在eval
语句可以在运行时改变,它没有被编译。
代码在一个eval
语句可能会意外地创建或指定当前工作空间中已经存在的变量,从而覆盖现有数据。
内的级联字符向量eval
陈述句通常很难读懂。其他语言结构可以简化代码中的语法。
的许多常见用法eval
,有一些首选的替代方法,如下面的示例所示。
经常使用的eval
函数的作用是创建一组变量,如A1
,A2
,…
,一个
,但是这种方法没有使用MATLAB的阵列处理能力,不推荐使用。首选的方法是将相关数据存储在单个数组中。如果数据集的类型或大小不同,则使用结构或单元格数组。
例如,创建一个包含10个元素的单元格数组,其中每个元素是一个数值数组:
numarray = 10;=细胞(numarray, 1);为numArrays A{n} = magic(n);结束
通过花括号索引来访问单元格数组中的数据。例如,显示的第5个元素一个
:
一个{5}
ANS = 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9
赋值语句{n} =魔法(n)
是否比这个调用更优雅和有效eval
:
的eval([“一个”,int2str(N),'=魔法(n)的'])%不推荐
有关更多信息,请参阅:
相关数据文件通常有一个带有整数索引的公共根名称,例如myfile1.mat
通过myfileN.mat
。常用的(但不推荐)用法eval
功能是构建和使用命令的语法,例如,每个文件名传递给功能
的eval([“拯救myfile”,int2str(N),“.mat”])%不推荐
最好的做法是使用函数的语法,它允许你传递变量作为输入。例如:
currentFile =“myfile1.mat”;保存(currentFile)
您可以使用一个循环内构建文件名sprintf
功能(通常比int2str
),然后致电保存
函数没有eval
。此代码在当前文件夹中创建了10个文件:
numFiles = 10;为n = 1:numFiles randomData = rand(n);currentFile = sprintf ('MYFILE%d.mat'中,n);保存(currentFile,“randomData”)结束
有关更多信息,请参阅:
的常用用法eval
是在函数名为可变字符向量时执行函数。有两种方法从变量中求函数值,它们比使用更有效eval
:
由包围表达为括号中的字段中具有可变字段名称的结构访问数据。例如:
myData。height = [67, 72, 58];myData。重量= [140, 205, 90]; fieldName = input(“选择数据(身高或体重):”,“年代”);dataToUse = myData。(字段名);
如果你输入重量
在输入提示,那么你就可以找到最低重量
值,使用下面的命令。
分钟(dataToUse)
ans = 90
有关其他示例,请参见从变量中生成字段名。
在MATLAB错误处理的优选方法是使用试,抓
声明。例如:
尝试B = A;抓异常disp (一个是未定义的)结束
如果您的工作区不包含变量一个
,那么这个代码返回:
一个是未定义的
以前版本的文档eval
函数包含语法catch_expr eval(表达)
。如果评估表达式
输入返回一个错误,然后eval
评估catch_expr
。然而,显式try / catch
比?中的隐式捕获明显更清楚eval
声明。不推荐使用隐式捕捞。