Scorpio 腳本的擴(kuò)展庫

2021-06-08 21:02 更新
函數(shù)庫
//腳本里使用

			//在函數(shù)里,有如下的方法可以獲取當(dāng)前函數(shù)的信息
				function x( a , b , c , d ){
				}
				//返回函數(shù)參數(shù)個(gè)數(shù)
				func.count( x );
				//返回函數(shù)是否是不定參函數(shù)
				func.isparams( x ) 
				//返回函數(shù)是否是靜態(tài)函數(shù)(不是table內(nèi)部函數(shù))
				func.isstatic( x ) 
				//返回函數(shù)參數(shù)名字 的 腳本數(shù)組
				func.getparams( x ) 
json庫
//推薦用表,不推薦使用 json
			
			//腳本里使用:
			
			//注意表的數(shù)據(jù)類型,表里面的變量不能是c#的容器,否則會(huì)出錯(cuò),
			//	例如:DictionaryStringString = generic_type( import_type("System.Collections.Generic.Dictionary`2") , import_type("System.String") , import_type("System.String") );
				//臨時(shí)的表
				var test = { 
					a = "100", b = b ; c = c ; d = d, e = 100, f = false 
					h = { t = [] };
					l = [];
					function m( a , b ,c ){
						foreach( pair in pairs( this ) ){
						    mtDebug.port_debug_log( pair.key + " = " + pair.value );
						}
						foreach( pair in pairs( this.h.t ) ){
						    mtDebug.port_debug_log( pair.key + " = " + pair.value );
						}
						foreach( pair in pairs( this.l ) ){
						    mtDebug.port_debug_log( pair.key + " = " + pair.value );
						}
					}
				};
				test.h.t[ 10 ] = "我";
				test.l[ 10 ] = "你";
				//表轉(zhuǎn)為json
				var str = json.encode(test)
				print(str)
				//json的轉(zhuǎn)為表
				var dec = json.decode(str)
				//讀取 表里的所有內(nèi)容
				test.m( 1 , 2 , 3 );
array庫
//腳本里使用:
			
			//建立一個(gè)臨時(shí)的空數(shù)組,該數(shù)組的元素支持任何的類型,包括但不限于 函數(shù)、變量、容器變量等等
			var tt = [];
			//添加 參數(shù)2 在 尾部
			array.add( tt , function(){ print("曾多次");return "ccc";} );//這是函數(shù)的,可以直接獲取tt[0]();進(jìn)行執(zhí)行
			//可以直接取出數(shù)組里的元素使用
			tt[ 0 ]();//這是執(zhí)行剛剛添加的元素1(函數(shù))
			//如果訪問范圍超標(biāo),則會(huì)直接進(jìn)行擴(kuò)容
			tt[ 50 ] = "擴(kuò)容";//會(huì)擴(kuò)容到50,那些沒有元素的位置們的值null
			//插入 參數(shù)3 在 參數(shù)2的位置
			//注意,array.insert 不自動(dòng)拓展數(shù)量的,要是任意使用insert不檢查長(zhǎng)度會(huì)出錯(cuò)的,所以在使用insert前必須先檢查長(zhǎng)度以擴(kuò)容以避免bug
				該自動(dòng)擴(kuò)展問題,已經(jīng)自行修改源碼實(shí)現(xiàn)自動(dòng)擴(kuò)展,所以不必要再顧忌這注意,但如果你使用的是自行下載的scorpio庫,還是自己根據(jù)情況改不改吧
			//注意,如果插入自動(dòng)擴(kuò)展的地方?jīng)]有值,則該位置是null
			array.insert( tt , 0 , "cscssc1" );//插入元素到第0位置,也就是它在最前面了
				//例如這樣,檢查它的數(shù)量如果長(zhǎng)度超出就調(diào)整其
				//priority是要插入的位置
				//function t( arrayPos , priority , script ){
				//檢查長(zhǎng)度是否足夠,不夠就擴(kuò)容
				//if( array.count( arrayPos ) < priority ){
				//	array.resize( arrayPos , priority  );
				//}
				//array.insert( arrayPos , priority ,  script );

				
			//移出 和 參數(shù)1相同的 1個(gè) 元素
			array.remove( tt , "cscssc" );
			//移除 參數(shù)1指定的位置 的 元素
			array.removeat( tt , 1 );
			//以參數(shù)2為可容納元素的數(shù)量,去變動(dòng)數(shù)組里的元素?cái)?shù)量,
			//	要是 當(dāng)前數(shù)組容量大于參數(shù)2,則會(huì)丟掉從頭部數(shù)起超過的元素
			//	要是 當(dāng)前數(shù)組容量小于參數(shù)1,則會(huì)在尾部添加null的元素以填充到符合參數(shù)1的長(zhǎng)度,這些元素可以丟掉的
			array.resize( tt , 0 );//這效果就等于是 array.clear( tt )了
			//丟掉里面的所有元素	
			array.clear( tt );
			//獲取里面的元素?cái)?shù)量,1表示里面有1個(gè)元素,0表示里面沒有元素
			array.count( tt );
			//排序,第2個(gè)參數(shù)是方法
			//它的使用就同c#里的Array.sort一樣,只不過我沒用過,所以不知道怎么用它
			array.sort( tt , function( a , b ){ return 1;} );
			//功能同indexof,最好還是少使用它為好
			//檢測(cè)數(shù)組里是否存在 元素1,存在就返回true,否則返回false
			array.contains( tt , "cscssc");
			//從頭部開始去尋找 參數(shù)2,找到就返回true,否則返回false
			array.indexof( tt , "cscss多吃點(diǎn)c");
			//從尾部開始去尋找 參數(shù)2,找到就返回true,否則返回false
			array.lastindexof( tt , "cscss多吃點(diǎn)c");
			//返回第1個(gè)元素,就同 tt[ 0 ] 一樣
			array.first( tt );
			//返回最后的元素,就同 tt[ array.count( tt ) - 1 ] 一樣
			array.last( tt );
			//不推薦使用,彈出(從容器里移出該元素和返回該元素)最后面的元素,如果沒有存在該元素則會(huì)出錯(cuò)
			array.pop( tt );
			//不推薦使用,安全的彈出最后面的元素,沒有存在該元素就返回null而不會(huì)出錯(cuò)
			array.safepop( tt );
			//彈出(從容器里移出該元素和返回該元素)最前面的元素,如果沒有存在該元素則會(huì)出錯(cuò)
			array.popfirst( tt );
			//彈出(從容器里移出該元素和返回該元素)最前面的元素,沒有存在該元素就返回null而不會(huì)出錯(cuò)
			array.safepopfirst( tt );
			//彈出(從容器里移出該元素和返回該元素)最后面的元素,如果沒有存在該元素則會(huì)出錯(cuò)
			array.poplast( tt );
			//彈出(從容器里移出該元素和返回該元素)最后面的元素,沒有存在該元素就返回null而不會(huì)出錯(cuò)
			array.safepoplast( tt );	

			//遍歷的方式1
			//使用 vpairs,不需要.value
			foreach( var xpair in vpairs( tt ) ){
			    print( "> " + xpair );
			}
			//遍歷的方式2
			//使用 pairs,需要.value
			foreach( var xpair in pairs( tt ) ){
			    print( "> " + xpair.value );
			}
table表庫
//腳本里使用:
			
		
			var c = { a = 5; c = 6; t = 7; function cc(){} };
			//能獲取含有所有的元素的名稱的array數(shù)組,
			table.keys( c );
				//檢索該數(shù)組的方式1
				//foreach( var xpair in pairs( table.keys( c ) ) ){
				//    print( "> " + xpair.value );//依次輸出是: a  c  t  cc
				//}
				//檢索該數(shù)組的方式2
				//foreach( var xpair in vpairs( table.keys( c ) ) ){
				//    print( "> " + xpair );//依次輸出是: a  c  t  cc
				//}
			
			//能獲取含有所有的元素的值的array數(shù)組
			table.values( c );
				//檢索該數(shù)組的方式1
				//foreach( var xpair in pairs( table.keys( c ) ) ){
				//    print( "> " + xpair.value );//依次輸出是: 5  6  7  Function(xpair)
				//}
				//檢索該數(shù)組的方式2
				//foreach( var xpair in vpairs( table.keys( c ) ) ){
				//    print( "> " + xpair );//依次輸出是: 5  6  7  Function(xpair)
				//}
				//檢索該數(shù)組的方式3
				//foreach (var p in kpairs( table.keys( c ) )){
				//	print(p)
				//}
			//返回表里面所有元素(包括函數(shù)、變量)加起來的數(shù)量
			table.count( c );//當(dāng)前是4個(gè)元素
			//清理表里面的所有元素成空表
			table.clear( c );
			//移除表里面的 參數(shù)2名稱的元素,要是沒該變量,也不會(huì)報(bào)錯(cuò)
			table.remove( c , "cc" );//會(huì)移除函數(shù)cc,變量也是直接寫上名稱的,例如變量t則是 "t"
			//查找表里是否存在 參數(shù)2的元素,在就返回true,否則返回false
			table.containskey( c , "cc" );
math庫
//腳本里使用:
			
			//該庫里的內(nèi)容 以后再進(jìn)行更新
			Table.SetValue("PI", script.CreateDouble(PI));
			Table.SetValue("Deg2Rad", script.CreateDouble(Deg2Rad));
			Table.SetValue("Rad2Deg", script.CreateDouble(Rad2Deg));
			Table.SetValue("Epsilon", script.CreateDouble(Epsilon));
			Table.SetValue("min", script.CreateFunction(new min()));
			Table.SetValue("max", script.CreateFunction(new max()));
			Table.SetValue("abs", script.CreateFunction(new abs()));
			Table.SetValue("floor", script.CreateFunction(new floor()));
			Table.SetValue("clamp", script.CreateFunction(new clamp()));
			Table.SetValue("sqrt", script.CreateFunction(new sqrt()));
			Table.SetValue("pow", script.CreateFunction(new pow()));

string庫
//腳本里使用:
			
			//提取參數(shù)填入順序的位置,從參數(shù)2開始包括參數(shù)2都是輔助要填入的參數(shù),如果{}不夠參數(shù)們多則忽略多余的參數(shù)
			string.format( "a{}b{}c{}d{}eeee", 5,6,7,8,9 );//返回值是"a5b6c7d8eeee"
			//返回指定范圍內(nèi)的字符串,
			//第2個(gè)參數(shù)是從 0開始的,例如例子里,0對(duì)應(yīng)的是"問"字,1對(duì)應(yīng)是3字
			//第3個(gè)參數(shù)是從 第2個(gè)參數(shù)開始數(shù)起來的 數(shù)量
			string.substring( "問3存檔完的2" , 0 , 3 );//返回的是 “問3存”
			//剔除最前面 ?個(gè)數(shù)量的字符(所有的字符包括漢字,1就是一個(gè)完整的)然后返回
			string.substring( "2徹底我的2" , 4     );//返回的是"的2" 				
			//返回字符串的長(zhǎng)度
			string.length( "充電電池x1" );//返回6
			//將大寫字母全部轉(zhuǎn)成小寫的
			string.tolower( "充電電CSndc池" );//返回是 "充電電csndc池"
			//將大寫字母全部轉(zhuǎn)成大寫的
			string.toupper( "充電電CSndc池" );//返回是 "充電電CSNDC池"
			//剔除字符串左右的空格、縮進(jìn)符(鍵盤上的TAB鍵)
			string.trim( "  s底層  x   ");//返回值是"s底層  x"
			//將所有符合的字符串內(nèi)容換成新的然后返回,該方法不會(huì)改變?cè)葏⑴c操作的字符串們
			//參數(shù)2是要找到的字符串
			//參數(shù)3是將找到的字符串替換成的新資費(fèi)從
			string.replace( "充電電CSndc池", "CSndc" , "啊s");//返回的是 "充電電啊s池"
			//字符串是不是空的或沒有內(nèi)容的,是就返回true,否則返回false
			string.isnullorempty( "ccc" );
			//從最前面(0表示第1個(gè)字符)字符開始,尋找參數(shù)2的字符串,如果找到,返回該字符的位置,沒有找到就返回-1
			string.indexof( "到成都局i吃" , "i" );//返回的是4
			//從參數(shù)3指定位置的(0表示第1個(gè)字符)字符開始(含該位置的字符),尋找參數(shù)2的字符串,
			//    找到就返回找到的首位置,找不到就返回-1
			string.indexof( "到成都局i吃吃點(diǎn)好的" , "i" , 5);//第5個(gè)也就是吃開始的向后找,所以找不到,返回的是-1
			//從最后面(0表示最后面的字符)字符開始,尋找參數(shù)2的字符串,如果找到,返回該字符的位置,沒有找到就返回-1
			string.lastindexof( "到成都局i吃" , "i" );//返回的是4
			//從參數(shù)3指定位置的(0表示最后面的字符)字符開始(含該位置的字符),尋找參數(shù)2的字符串,
			//    找到就返回找到的首位置,找不到就返回-1
			string.lastindexof( "到成都局i吃吃點(diǎn)好的" , "i" , 5);//第5個(gè)也就是吃開始的向后找,所以找不到,返回的是-1
			//判斷參數(shù)2是否在字符串1的開頭,是就返回true,否則返回false
			string.startswith( "多吃豆腐的cc" , "多吃" );//返回的是true
			//判斷參數(shù)2是否在字符串1的末尾,是就返回true,否則返回false
			string.startswith( "多吃豆腐的cc" , "的cc" );//返回的是true
			//功能同 string.indexof
			//尋找參數(shù)2字符串是否在參數(shù)1字符串里,是返回true,否則返回false
			string.contains( "的房間誒的附加費(fèi)" , "的" );//返回值是true
			//分隔提取出數(shù)據(jù)們成表,參數(shù)2是要分隔的字符
			string.split( "的c房間c誒c的c附c加cc費(fèi)c" , "c" );
				//這是例子,會(huì)從 0開始檢索出所有的值
				//foreach( var xpair in pairs( string.split( "的c房間c誒c的c附c加cc費(fèi)c" , "c" ) ) ){
				//    print( "> " + xpair.value )
				//}
				//下面的例子,使用的是 vpairs,所以不需要寫.value就可以取值
				//foreach( var xpair in vpairs( string.split( "的c房間c誒c的c附c加cc費(fèi)c" , "c" ) ) ){
				//    print( "> " + xpair )
				//}




以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)