名字空间组织、归类、标识一组具名对象的名字,是模块化编程的重要基础。
.
连接为完整的名字空间路径。aardio 使用 namespace 语句定义名字空间。
如果一个不存在的变量首次被赋值( var 语句声明的局部变量除外),则会自动加入到当前名字空间。
请参考:赋值语句
定义名字空间语法:
namespace namespaceName{
//名字空间内部代码
}
名字空间可以嵌套,默认每个 namespace 语句总是在当前名字空间内部创建新的名字空间,如下:
namespace namespaceName1{
namespace namespaceName2{
//名字空间内部代码
}
}
namespaceName1.namespaceName2.member = 123
名字空间也可以省略语句块标记,表示名字空间作用域直至该代码文件结束:
namespace namespaceName
//名字空间内部代码,名字空间的作用域直到文件结束
在 aardio 中每个名字空间都是独立的,创建名字空间后,访问全局名字空间的对象必须显式加上 ..
前缀,例如:
namespace myNamespace{
..print("访问全局对象必须加上 .. 前缀。")
}
上面的 ..print
等价于 global.print
,注意 ..
后面不能出现空白字符。
定义名字空间时也可以使用 ..
作为前缀,以表示在全局名字空间而不是当前名字空间之内创建新的名字空间,如下:
import console;
namespace namespaceName{
namespace ..globalNamespaceName{
//名字空间内部代码
member = 123
}
}
console.log( globalNamespaceName.member );
console.pause(true);
要点:
..
操作符。global 为默认的全局名字空间,当aardio代码文件加载时,默认都运行在 global 名字空间。
self 表示当前名字空间。
默认的名字空间为 global,也就是说 self 默认指向 global。
import 语句可以将外部名字空间导入当前名字空间(并且总是会同时导入全局名字空间)。
标准库通常都是将外部名字空间导入到 global 名字空间,并且在非全局名字空间中使用 ..
操作符访问其他全局名字空间。
//自 console 库导入 console 名字空间
import console;
//定义新的名字空间
namespace namespaceName{
//非全局名字空间使用 .. 操作符访问其他全局名字空间。
..console.log("调用导入的 console 库函数")
}
console.pause();
如果导入未定义的名字空间,import 语句会尝试自库文件导入名字空间。
aardio 库文件的物理路径与名字空间路径保持一致,对于模块化编程提供良好的支持。
注意:名字空间不能是单个下划线(可以包含下划线)! aardio 使用 _.aardio
文件创建库目录下的默认库,除此之外 aardio 不建议在库名字空间中使用任何下划线。如果在 IDE 中右键创建库或改动库名,aardio 将会自动移除下划线。如果您一定要在库名字中包含下划,则必须在资源管理器中手动改名。
请参考: import
with 语句用于将一个表达式返回的 table 对象绑定为当前名字空间,with 语句执行结束释放绑定。名字空间作用域为当前函数体(以及内部函数),单个代码文件属于匿名函数。
with 语句必须执行完成(没有中途跳出)才能恢复当前函数名字空间。
示例:
import console;
var tab = {}
with tab{
name = "测试";
..console.log(name);
}
console.logPause( tab.name )