eval 命令在 MEL 范围的顶层执行。因此,它可以识别全局变量,但不会识别在程序内定义的变量(局部变量)。有关详细信息,请参见全局和局部变量。
string $cmd = "select -cl"; eval($cmd);
第一个语句将命令字符串 select -cl 指定到字符串变量 $cmd。第二个语句执行 $cmd 的内容,即命令 select -cl。
string $mycommand = "sphere"; eval($mycommand+"-r 5");
第一个语句将字符串 sphere 指定给变量 $mycommand。第二个语句将 -r 5 附加到字符串 sphere,并执行完整命令 sphere -r 5。这将创建半径为 5 个栅格单位的球体。
string $a[]; $a = eval("ls -lights"); print($a);
第一个语句定义名为 $a 的字符串数组。第二个语句执行 MEL 命令 ls -lights,然后将命令输出指定到数组 $a。第三个语句将 $a 的内容显示到“脚本编辑器”(Script Editor),如下所示:
ambientLightShape1 directionalLightShape1
假定已经在 Maya 脚本目录中创建了名为 bunk.mel 的 MEL 脚本文件,而且其中包含该程序:
global proc string bunk() { string $fog; if (rand(2) < 1) $fog = "particle"; else $fog = "sphere"; return $fog; }
string $name = bunk(); eval($name); print($name);
第一个表达式语句在 bunk.mel 脚本文件中执行 bunk() 程序。在 bunk 程序中,if-else 语句生成介于 0 和 2 之间的随机浮点值,然后将该值与 1 比较。
如果值小于 1,该语句会将 MEL 命令字符串 particle 指定到 $fog。如果该值大于 1,$fog 将接收命令字符串 sphere。
该程序将完成执行并将 $fog 的值返回给调用程序,即表达式中的 bunk()。这会将命令字符串指定给变量 $name。
eval 函数将执行存储在 $name 中的命令字符串。例如,该语句可能会执行 particle,在工作区的原点创建粒子。