}
在一个case 语句之后,可以有任何语句,包括流控制。为了防止MEL连续地执行下一个case语句,可以使用一个break语句。
在一个switch内,一个break语句使switch语句的其余部分被忽略。 例:break 语句 int $sway = rand(3); switch ($sway) { case 0:
print(\break; case 1:
print(\break; case 2:
while (rand(10) < 7) // These statements print(\print(\break; }
提示:虽然在一个switch语句里的最后的一个case语句不需要一个break语句,因为这是switch的结束, 但加上一个break仍然是个好想法。如果你想要再增加case 给该switch语句,break语句已经在这儿了。 如果你想要该switch继续执行下一个case语句,可以不要break语句。但是,当以后修改这段程序代码时有可能会出现问题。 int $argo = rand(2); switch ($argo) { case 0:
print(\case 1:
print(\break; }
可以用多于一条case语句去执行同一个MEL语句块。如,如果想要使\和\的控制值都执行一些语句,可以写与以下例子相似的程序:
string $mt = rand(2) < 1 ? \string $mp = rand(2) < 1 ? \string $XXz = rand(2) < 1 ? $mt : $mp; switch ($XXz) { case \case \
print(\break;
26
case \case \
print(\break; }
在这个例子中,变量$mt可以是\或者\,变量$mp可以是\或者\。另外,变量$XXz可以是可变量。这意味着$XXz和控制值可以是\、\、\或\。
要说明一个要执行的语句块,即使没有与控制值相匹配的case值,可以使用缺省标号。 该标号可以被定位在switch语句的任何地方,但是它总是出现在所有的case语句的后面。 如果没有缺省标号和没有与控制值相匹配的case值,则该switch语句什么事也不做。 例子:缺省标号
vector $mgb = <<1, 1, 0>>; switch ($mgb) {
case <<0, 1, 1>>:
print(\break;
case <<1, 0, 1>>:
print(\break; default:
print(\break; // <<0, 1, 1>> or <<1, 0, 1>> }
在上述例子中,执行了缺省的case,并显示\。
定义作用(2)
4、环
当某个测试条件为真时条件语句执行语句。而当某个测试条件为真时环语句重复地执行语句。
虽然环允许你在写脚本中进行有效的控制,但是它也是产生问题的根源。语句无休止地重复执行的环会永远没有停止。如,执行\(1);\,Maya会不停止的执行这一行;不要试做它,除非你准备退出Maya。 本节描述三种主要的环语句:while、do-while和for。也描述了环的中断语句:continue和break。 while
一个while环继续执行一些希望执行的语句,一直到某个条件为真时为止。它有以下格式: while (test condition) statement;
如果测试条件为真,Maya便执行该语句。Maya随后再次检测该测试条件。如果测试条件为真,就再次执行该语句。继续这个过程,直到该测试条件为假。这时退出环。 int $files = 5; while ($files > 2)
print(\以上的例子程序的输出如下: There are 5 files left. There are 4 files left. There are 3 files left.
27
上例中当该条件第一次被检测时,files有值5 ,5大于2,产生了一个真条件。 因此,执行显示指令,并将files减量为4。
在这点,测试条件再次由4对files进行判断。测试条件再次为真,因此再执行显示语句,并将files减量为3。然后测试条件再次为真,再执行显示语句,并将files减量为2。这次测试条件为假,因为2不大于2。while语句退出。
当测试条件为真时,如果有多于一行的MEL脚本程序被执行,可以使用分组。 int $t = -10; while ($t < 0) {
print(\$t = $t + 1; }
print(\do-while
一个do-while环非常相似于一个while环,因为两者都执行一些说明的语句,直到某个测试条件为真。但是,do-while环先执行语句,然后检查是否要重复这个环。这就是说该语句至少要执行一次。 一个do-while环有以下格式: do statement;
while (test condition); 注意do-while loop必须以分号(do
print(\while (rand(2));
在以上的例子中,rand(2)是一个在0与2之间的浮点值。这个数转换成一个整数后为0, 1或者2。1 或 2 的值会使该环重复;0 值则退出该环。每次测试条件被评价时,rand(2)可以返回一个不同的数。因此,测试条件测试条件具有大约50%的机会为真;有大约50%的机会为假。 这里是一个使用分组的类似的一个例子: do {
print(\print(\} while (rand(2)); for
你可能常常希望一个具有初始化设置、测试和条件语句的改变的环控制。为此可以使用for环。for环有以下格式:
for (initializer; test condition; change of condition) statement;
初始化只被执行一次,在for环被执行之前。初始化是一条语句,它一般使用于把一个值标注给测试条件中的一个变量。可以使用初始化执行任何语句或者也可以完全地不进行初始化。但是,它不能被用于声明一个变量。
for环在执行语句之前判断测试条件。for环的这一部分完全象while环。事实上,一个for环正是一个具有初始化和条件语句改变的while环。但是,如果缺少了测试条件,测试条件则总是被假定为真,在一个while环中会产生一个错误。当测试条件为真时,该语句被执行;一旦被判断为假,就退出该环。 在环的每一次反复中执行的条件语句的改变可以加在环的最后。典型地,条件语句的改变用于改变一些环
终止。
28
控制变量,虽然你可以对任何语句使用它或者完全不用它。 int $Index;
for ($Index = 0; $Index < 2; $Index++) print(\for ($Index = 0; $Index < 3{
print(\$Index = $Index + 1; }
for (; $Index--for (;
print(\if (rand(5))
print(\else break;
这些例子显示出了当使用for环时一些不同的可能性。在最后的for环中,if else语句被认为是一条单语句。
虽然初始化不能用于声明一个变量,但它可以被用于隐含声明一个变量。 for ($xxx = 0; $xxx < 3; $xxx++) print(\
for环也允许你使用多个初始化或者多个增量器。为此,用逗号(,)把各个初始化和条件语句的改变分离开。 int $nx1, $nx2;
for ($nx1 = 0, $nx2 = 10; $nx1 < $nx2; $nx1++, $nx2--) print(\float $cg = 25.3;
for (; $cg < 93.8; $nx1--, $nx2 = rand(11), $cg *= 1.7) {
print(\print( \} for-in
for-in环是for环的一个引申。它专门工作在阵列中。你可能常常想隐含地通过一个阵列的所有元素。当一个for环需要一个索引变量、初始化、测试条件和增量器时,for-in环只需要一个元素变量。for-in环有以下格式:
for (element in array) statement; 例子: for-in 环 string $car;
string $cars[3] = {\for ($car in $cars)
print(\结果是: I have an NSX.
29
I have a Porsche. I have an Acura. 例子: for loop int $carIndex;
string $cars[3] = {\for ($carIndex = 0; $carIndex < size($cars); $carIndex++) print(\
以上的for环都是等价的,但是for-in环需要的输入较少些。 vector $coordinates[2] = {<<1, 2, 3>>, <<4, 3, 7>>}; for ($coordinate in $coordinates) {
print(\print(\} continue
continue语句都出现在环内。它聚焦在要发生的环的下一次反复,跳过该环的所有其余的语句。 例子:
float $fox = 5;
for ($fox = 0; $fox < 5; $fox++) {
print(\if ($fox > 2) continue;
print(\} 输出是: $fox equals: 0 Got here $fox equals: 1 Got here $fox equals: 2 Got here $fox equals: 3 $fox equals: 4
没有if语句,在该$fox quals: 3 和 $fox equals: 4行之后环也输出Got here。Maya忽略了continue语句直到$fox增加到一个大于2的值。当$fox 成为3 或更大时,continue语句执行并跳过环中其余的语句,显示出got here。 break
break语句立即退出一个环。可以使用一个break语句在所有的环之内。 float $free = 0; while ($free < 10) {
print(\if ($free++ == 3)
30