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)
				}




以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号