名字空间
import console;
/*
名字空间组织、归类、标识一组具名对象的名字,是模块化编程的重要基础。
1. var定义的局部变量有保护变量的作用,其它文件不能调用
2. 成员变量是名字空间里的变量,加前缀名字空间名来访问,在全局名字空间里可以不加前缀名字空间名
3. 不同的名字空间,相同的成员变量名不会相互影响
4. 名字空间的定义:
namespace namespaceName{
//名字空间内部代码
}
5. 名字空间可以嵌套:
namespace namespaceName1{
namespace namespaceName2{
//名字空间内部代码
var member = 111
}
}
namespaceName1.namespaceName2.member = 123
6. 名字空间可以省略语句块标记{},表示名字空间作用域直至该代码文件结束:
namespace namespaceName
7. 如果在名字空间前面加上两个连续的小圆点 .. 作为前缀,则该名字空间为全局名字,如下:
import console;
namespace namespaceName{
namespace ..globalNamespaceName{
//名字空间内部代码
member = 123
}
}
console.log( globalNamespaceName.member );
console.pause(true);
8. 名字空间其实也是一个普通的 table 对象。
9. 访问顶层名字空间要使用 .. 操作符。
10. global 与 self 名字空间
self 表示当前名字空间。
global 为默认的全局名字空间,当aardio代码文件加载时,默认都运行在global名字空间。
默认的名字空间为 global,也就是说 self 默认指向 global。
*/
// 一、通过名字空间引用名字空间内的成员变量a
// 1) 在本空间内定义一个 b 在用户库的名字空间 myFirstLib 内定义一个 局部变量 a 和一个成员变量b
console.log("3------------------------------------------")
import myFirstLib;
a = 3
var b = 5
console.log(b,myFirstLib.a) // 5 null
console.log(b,myFirstLib.b) // 5 20
// 2) 名字空间的局部变量和成员变量
console.log("4------------------------------------------")
// 名字空间内部:
namespace test{
// 局部变量
var m = 10 // 不能通过 myFirstLib.b 的方式使用,否则得到 null,局部变量只能在此名字空间内起作用,
// 成员变量
n = 20 // 这个可以被此名字空间之外的地方通过 myFirstLib.b 的方式使用
}
// 名字空间外部:
console.log(m,n) // null null
console.log(test.m) // null
console.log(test.n) // 20
// 3) global 与 self
// 全局的名字空间 global (通常缺省)
// 凡是不在别的名字空间内的变量都在全局的名字变量内
console.log("5------------------------------------------")
x = "你好"
var y = "aardio"
console.log(global.x) // 你好 等同于 console.log(c)
console.log(y) // aardio
console.log(global.y) // 空值 null 不显示
console.log(global.y == null) // true
// self 指向 本名字空间,在 global 名字空间内指向 global 在自定义的名字空间则指向自定义的名字空间
e = 3
var f = 6
console.log(self.e) // 3
console.log(global.e) // 3
console.log(self.f) // null
console.log(global.f) // null
console.log("6------------------------------------------")
var str1 = "abcdef"
str2 = "我是外层名字空间的变量"
_str3 = "我是常量"
namespace test2{
// 局部变量
var m = 10 // 不能通过 myFirstLib.b 的方式使用,否则得到 null,局部变量只能在此名字空间内起作用,
// 成员变量
n = 20 // 这个可以被此名字空间之外的地方通过 myFirstLib.b 的方式使用
// 1)self 在名字空间中的使用
..console.log(self.m) // null
..console.log(self.n) // 20
// 在一个名字空间内使用标准库或用户库,需要先导入进来,或者其外层名字空间内已经导入了,可以使用 ..库名 的方式引用
import console
console.log(self.n) // 20
// 2).. 的使用 ..相当于 global 而不一定是上一层
console.log(..str1) // null
console.log(..str2) // 我是外层名字空间的变量 相当于 console.log(global.str2)
console.log(global.str2)
console.log(.._str3) // 我是常量 相当于 console.log(global._str3)
namespace test3{
import console
console.log(..test2.n) //20
console.log(..str2) //我是外层名字空间的变量 相当于 console.log(global.str2)
}
}
// 二、关于名字空间是表的理解:
// console.dump(test2) // 可以看出是表,并且包含很多信息
console.log("7------------------------------------------")
global["str4"] = "我是一个字符串"
console.log(global["str4"])
my_str = "hello"
console.log(global["my" + "_str"]) // hello
b1 = "hello"
console.log(global["b" + 1]) // hello
// 上述方法的用处:
/*
import win.ui
for(i=1;3;1){
win.msgbox(winform["button" + i].text)
}
*/
console.pause();
标签:console,log,..,05,aardio,global,名字,空间,入门
From: https://www.cnblogs.com/Collin-pxy/p/18463552