全局程序

一旦定义了全局程序,您可以在任意位置调用它:从任意脚本文件、在任意函数中、或从命令行

1
2
3
4
global proc return_type procedure_name( arguments ) 
{
MEL_statements
}
  • global 关键字使新程序在任意位置可用。
  • proc 关键字指示您正在定义程序。
  • 可以在 proc 后为程序的返回类型添加关键字。例如,如果程序返回一个整数,请键入 int。如果程序不返回值,可以忽略。
  • 程序的名称。
  • 参数列表,包括在括号内,且之间用逗号分隔。每个参数都是一个前面带有其类型(例如 string)的变量名(以 $ 开头)。
  • 要在调用程序时执行的代码块。

如果没有为程序指定返回类型(指示该程序将不会返回值),则您只能指定 return 运算符,而不返回值。在该上下文中使用的 return 运算符相当于函数中断符。

1
2
3
4
5
global proc add5(int $x) {return $x+5;}; 
// Error: global proc cc(int $x) {return $x+5;}; //
// Error: This procedure has no return value. //
// This works.
global proc add5(int $x) {return;};"

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
global proc string sayHi() {
return "Hello!\n";
}
global proc float square(float $x) {
return $x * $x;
}
global proc int max(int $a, int $b) {
if ($a > $b) {
return $a;
} else
return $b;
}
global proc msg() {
print "This proc has no return value.\n";
}

如果在程序声明的开头不使用 global 关键字,则该程序对于在其中定义它的文件是局部的

1
2
// 仅对此文件中的代码可见。
proc red5() {print("red5 standing by...\n");}

调用程序

调用两种方式

1
2
helloValue( 1, "Jake" );

1
2
helloValue 7 "Torq";

外部程序

如果 Maya 遇到没有定义的命令,则将搜索与该命令相同的 MEL 脚本的脚本路径(在文件名中去掉 .mel 扩展名)。

如果找到该文件,将在该文件内声明所有的全局 MEL 程序,如果该文件内存在已调用的程序,则执行此程序。

例如,用户在其中某个脚本文件夹中含有文件 sayWhat.mel,该文件内容如下:

1
2
3
4
5
proc red5() {print("red5 standing by...\n");}

global proc GoGo() {print("GoGo online\n");}

global proc sayWhat() {print("sayWhat online\n");}

调用函数 sayWhat

  • 由于没有内部命令 sayWhat,Maya 将搜索文件名为 sayWhat 或 sayWhat.mel 的文件的所有脚本路径。
  • 如果在其中某个脚本目录中找到文件 sayWhat.mel 脚本,Maya 将检查文件中是否存在尝试调用的程序。如果有,Maya 将调用该程序。在本示例中,文件中已存在 sayWhat 的程序,因此可以执行