• 对于所有其他顶级 MEL 代码而言,在程序外部定义的变量均是可见的(能够访问和更改)。

    在程序内部定义的变量仅在该程序内可见。这些变量称为局部变量。例如:              

    float $counter

    程序的局部变量与全局变量分离,并与其他程序中的变量分离。局部变量将覆盖该程序内同名的全局变量。              

    所有这些变量均允许写入程序,且无需担心选择的变量名称是否会与 Maya 或其他程序冲突。              


  • 使用全局关键字,可以使程序内的变量全局可见。              

    如果要在某个程序中创建并保持变量,并且还在该程序的外部使用该变量,则可以将其声明为全局变量。例如:              

    global float $counter;
    $counter 变量可由顶级中的、以及其他将 $counter 声明为全局变量的程序中的任何 MEL 代码读取或更改。此外,如果全局 $counter 变量已存在,则该程序将使用它,而不是创建新变量。               


  • eval 命令将在顶级 MEL 范围中执行。因此,它可识别全局变量,但不会识别在程序内部定义的变量(局部变量)。

  • 通常,这是一个很好的编程实践,可以尽量避免使用全局变量。这样,调用程序时,几乎不可能出现不需要的副作用。

全局变量的使用示例

以下是一些使用全局变量的代码示例。

示例 1              

以下代码在 myProcedure 程序中使用 $globalText 全局变量。globalText 全局变量已在程序的外部定义:              

global string $globalText;
global proc myProcedure()
{
global string $globalText;
print($globalText);
} 

示例 2              

在该示例中,MEL 将生成一个可用来创建更多子窗口的窗口。$chosenOne 全局变量将跟踪用户选择的子窗口。在每个新创建的子窗口内,均有一个 chooseMe 按钮。单击该按钮,可以将该特定窗口设定为 $chosenOne。在主、父对象窗口中单击“删除选择的窗口”时,将删除                  $chosenOne。              

在以下图像中,window4 是 $chosenOne,它将在您单击“删除选择的窗口”时删除。        

               

代码如下所示:              

global proc int pressMe(string $thisOne) { 
	global string $chosenOne;
	print ("was " + $chosenOne + "
");
	$chosenOne = $thisOne;
	print ("nowIs " + $chosenOne + "
");
	return 1; 
} ;
global proc int satWindow(){
             string $temp = `window -width 150`;
             button -label "Choose Me" -command ("pressMe " + $temp);
             showWindow;
             return 1;
}
global proc int baseWindow() { 
	global string $chosenOne;
	
	window -width 150;
	columnLayout -adjustableColumn true;
	button -label "Make another Window" -command "satWindow";
	button -label "Delete Chosen Window" -command "deleteUI -window $chosenOne";
	
	showWindow;
	return 1; 
} 
baseWindow()
,