Scorpio 表
2021-06-08 21:01 更新
//临时的表,因为加了 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) }
以上内容是否对您有帮助:
更多建议: