命令和过程是以相同的方式执行的。下列示例说明了这一点。
proc float myTime(string $dummyFlag, float $time) {return $time;}
currentTime -e 1;
myTime -e 1;
currentTime "-e" "1";
myTime "-e" "1";
currentTime("-e", 1);
myTime("-e", 1);
若要执行命令或过程并获得返回值,可以按下列示例所说明的那样,使用 eval、`` 或 () 语法。
string $transforms[];
$transforms = eval("ls -type transform");
$transforms = `ls -type transform`;
$transforms = ls("-type", "transform");
使用其中每种类型的语法时需要记住的重要事项如下:以下是它们之间的关键差异。阅读这些内容,以便了解要使用其中哪种。
eval
- 允许延迟的求值。通常,执行脚本时,如果未定义命令,Maya 仍会尝试执行脚本。
例如,如果尝试执行一个脚本,该脚本首先加载插件,然后立即执行该插件,那么执行插件命令时,该脚本将失败。这是由于 Maya 最初会对脚本求值以检查它所不知道的命令。但是,如果插件命令是使用 eval 语法执行的,那么脚本将不会失败。
- 可以嵌套命令。例如:eval("sphere; cone; ls");
- 整个命令(包括其参数)必须为单个字符串。例如:eval("ls -type transform");
后引号
- 立即求值。
- 无法嵌套命令。
- 不需要将字符串参数括在引号中。例如:string $trans2[] = `ls -type transform`;
- 不能作为独立的命令使用该语法,因为它是用于指定一个命令的结果或构建另一个命令。例如,不能执行下列命令:`ls -type transform`;
( )
- 立即求值。
- 无法嵌套命令。
- 必须将字符串参数括在引号中。例如,如果 $faces 表示对象中的面数,那么可能会使用 ( ) 来构建要打印输出的字符串。
print("This object has " + $faces + " faces \n");