Scorpio 表
//临时的表,因为加了 var关键字
var base = {
ise;//如果没有值则默认是null值,框架的旧脚本可能不支持默认null,所以应当直接赋值null
//表里的属性变量不要用var局部变量
value1 = 100;
vau2 = '你是谁'
4cscs = null
function hello1(){
//this是本层的意思,而本层是base表
print("hello1 " + this.value1 )
}
function hello2() { print("base hello2") }
}
//表的初始化 和 this 问题
一开始是 逐句的解析 和构造 表,所以执行到this的时候,this还没赋予,所以一开始是没有this的,所以如果这样做是错误的
var ta = {
b = 6;
//最新脚本已经增加了"后申请的变量使用前申请的变量,而不用this"的功能,所以最新脚本可以使用
//而 框架用的版本没有增加,所以用框架的脚本会错误
a = b + 5;
//最新脚本已经增加了初始化时变量可以使用函数功能,不管该函数是在表里的哪里定义的都可以调用(函数里面的this也可以用了)
//但注意的是,函数里的this要是使用到了没有赋值的变量,例如使用到了还没赋值的 g,就会获取到null,导致隐形错误问题
//而 框架用的版本没有增加,所以用框架的脚本会错误,
k = d();//最新脚本赋予值是 "6null" ,框架里使用的旧版错误
function d(){ return "6" + this.g };//g还没有初始化,所以是null
g = 99;//逐句的解析到这里,g才初始化为99
}
//建议是写一个初始化方法,解析了表后,就执行它的初始化,这样就不必要纠结这些 初始化问题
var ta = {
a = null;
k = null;
function init(){
this.a = 6;
this.k = "6" + this.a;
}
}
ta.init();
//能通过[]去访问数字的变量,不推荐使用,推荐使用 脚本数组
//能通过[]去访问变量名称, 但不推荐使用
base[ "vau2" ];
//对于不存在的元素,也可以访问的,值是null
base[ "dc" ] == null;
//可以增加新的成员赋值
base[ 'fun' ] = function(){};//函数
base[ 'fun2' ] = {};//表
//复制一份该表的内容,这样就存在2个base表了(这就等于是 c#里的new)
var tm = clone( base );
//a继承了 base 和 附加新的内容
var a = base + {
value2 = 200,
function hello2() { print("a : hello2 " + this.value2) }
}
//b继承了 base 和 附加空的内容
var b = base + {}
a.value1 = 300
a.hello1() //输出 hello1 300
a.hello2() //输出 a : hello2 200 ,因为其的 新hello2覆盖了父的base的hello2
b.hello1() //输出 hello1 100
b.hello2() //输出 base hello2
//用 + += 可以实现伪继承 相加的数据都是clone的,所以相互的数据不会共享,可以 实现抽象和继承,但不推荐脚本继承
//完全复制一个table 里面的数据不会共享
var base1 = clone(base)
var base2 = clone(base)
base1.value1 = 300
//可以将 表当成 关键字容器 使用,从性能角度,也推荐使用表去代表 c#的容器
//空的表,用来作为 关键字 容器的
c = {};
//假设填进数据
for( var i = 0; i < 10; i ++ ){
for( var k = 0; k < 10; k ++ ){
//要是没有这个变量数据,它会自动赋予的
c[ i + "x" + k ] = i + "x" + k;
}
}
" " + c[ 1000 ];//输出值是 null
//遍历输出它们
foreach( var xpair in vpairs( table.keys( c ) ) ){
"> " + xpair;
}
//表像c#那样 只读遍历
//数组array也是这样遍历的
var tab = {a = 100, b = 200, c = 300, d = 400}
//获得表的数量,看 最上面的导航 "table表"
table.count(tab)
//可以获得索引+元素
foreach ( var p in pairs(tab)) {
print(p.key + " = " + p.value)
}
//可以直接获得表的元素
foreach (var p in kpairs(tab)) {
print(p)
}
//可以直接获得表的元素
foreach (var p in vpairs(tab)) {
print(p)
}