Maxscript 变量定义及作用域
定义
mxs是动态类型,定义变量时,只需要左边变量名 = 右边值
num = 1
这个操作有非常大的问题,倒不是类型的问题,而是作用域的问题
mxs运行时将会根据你定义变量的位置自动规划此变量的作用域
如果你在:侦听器或者编辑器最外侧运行上面的代码,此变量将变为全局变量
如果你在:括号代码块内部运行,此变量将会作为局部变量
如果你希望一个变量名既是全局的又是局部的
这是可以做到的…但我无法接受这种操作,也不会在实际项目中编写这样的代码
如果是全局变量,我会明显的加上global
, 比如: global num = 1
来定义
如果是局部变量,我会明显的加上local
, 比如: (local num = 2)
来定义
这种情况下,全局变量和局部变量将同时存在
global num = 1
(
local num = 2
)
事实并不如想象,如果你在b文件里定义了一个全局常量,并且在a文件里一个局部代码块里面希望filein 它并使用这个全局变量
第一次这个变量会提示无法找到,此时大多数人的解决方案是,在b文件的顶部,或者专门找个文件来优先主动gloabl 申明一次
全局调用
局部调用,第一次
局部调用,第二次
mxs是一门闭源的语言,我猜测这个问题的原因是因为作用域的机制,在局部代码块内,这个变量依然被认为是local
为了“更近的”解决这个问题,mxs里面有一个与c++作用类似的符号::,使用::可以定义或者访问一个全局变量,如下代码示例,你可以主动加上::来访问全局变量
在第一个例子中,你可以这样来访问同名的全局或局部变量
参考
https://trykle.gitee.io/maxscript-doc/doc/index.html?query=#!/url=./wrapped-files/MAXScript-Language-Reference/Variables-Assignment-and-Scope/Scope-of-Variables.html
https://trykle.gitee.io/maxscript-doc/doc/index.html?query=#!/url=./wrapped-files/MAXScript-Language-Reference/Variables-Assignment-and-Scope/Specifying-Global-Variables-As.html