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

posted @ 2020-11-30 19:27  trykle  阅读(551)  评论(0编辑  收藏  举报