阅读(2046)
赞(29)
Scorpio 脚本的扩展库
2019-06-21 23:33:04 更新
函数库
//脚本里使用
//在函数里,有如下的方法可以获取当前函数的信息
function x( a , b , c , d ){
}
//返回函数参数个数
func.count( x );
//返回函数是否是不定参函数
func.isparams( x )
//返回函数是否是静态函数(不是table内部函数)
func.isstatic( x )
//返回函数参数名字 的 脚本数组
func.getparams( x )
json库
//推荐用表,不推荐使用 json
//脚本里使用:
//注意表的数据类型,表里面的变量不能是c#的容器,否则会出错,
// 例如:DictionaryStringString = generic_type( import_type("System.Collections.Generic.Dictionary`2") , import_type("System.String") , import_type("System.String") );
//临时的表
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 ] = "你";
//表转为json
var str = json.encode(test)
print(str)
//json的转为表
var dec = json.decode(str)
//读取 表里的所有内容
test.m( 1 , 2 , 3 );
array库
//脚本里使用:
//建立一个临时的空数组,该数组的元素支持任何的类型,包括但不限于 函数、变量、容器变量等等
var tt = [];
//添加 参数2 在 尾部
array.add( tt , function(){ print("曾多次");return "ccc";} );//这是函数的,可以直接获取tt[0]();进行执行
//可以直接取出数组里的元素使用
tt[ 0 ]();//这是执行刚刚添加的元素1(函数)
//如果访问范围超标,则会直接进行扩容
tt[ 50 ] = "扩容";//会扩容到50,那些没有元素的位置们的值null
//插入 参数3 在 参数2的位置
//注意,array.insert 不自动拓展数量的,要是任意使用insert不检查长度会出错的,所以在使用insert前必须先检查长度以扩容以避免bug
该自动扩展问题,已经自行修改源码实现自动扩展,所以不必要再顾忌这注意,但如果你使用的是自行下载的scorpio库,还是自己根据情况改不改吧
//注意,如果插入自动扩展的地方没有值,则该位置是null
array.insert( tt , 0 , "cscssc1" );//插入元素到第0位置,也就是它在最前面了
//例如这样,检查它的数量如果长度超出就调整其
//priority是要插入的位置
//function t( arrayPos , priority , script ){
//检查长度是否足够,不够就扩容
//if( array.count( arrayPos ) < priority ){
// array.resize( arrayPos , priority );
//}
//array.insert( arrayPos , priority , script );
//移出 和 参数1相同的 1个 元素
array.remove( tt , "cscssc" );
//移除 参数1指定的位置 的 元素
array.removeat( tt , 1 );
//以参数2为可容纳元素的数量,去变动数组里的元素数量,
// 要是 当前数组容量大于参数2,则会丢掉从头部数起超过的元素
// 要是 当前数组容量小于参数1,则会在尾部添加null的元素以填充到符合参数1的长度,这些元素可以丢掉的
array.resize( tt , 0 );//这效果就等于是 array.clear( tt )了
//丢掉里面的所有元素
array.clear( tt );
//获取里面的元素数量,1表示里面有1个元素,0表示里面没有元素
array.count( tt );
//排序,第2个参数是方法
//它的使用就同c#里的Array.sort一样,只不过我没用过,所以不知道怎么用它
array.sort( tt , function( a , b ){ return 1;} );
//功能同indexof,最好还是少使用它为好
//检测数组里是否存在 元素1,存在就返回true,否则返回false
array.contains( tt , "cscssc");
//从头部开始去寻找 参数2,找到就返回true,否则返回false
array.indexof( tt , "cscss多吃点c");
//从尾部开始去寻找 参数2,找到就返回true,否则返回false
array.lastindexof( tt , "cscss多吃点c");
//返回第1个元素,就同 tt[ 0 ] 一样
array.first( tt );
//返回最后的元素,就同 tt[ array.count( tt ) - 1 ] 一样
array.last( tt );
//不推荐使用,弹出(从容器里移出该元素和返回该元素)最后面的元素,如果没有存在该元素则会出错
array.pop( tt );
//不推荐使用,安全的弹出最后面的元素,没有存在该元素就返回null而不会出错
array.safepop( tt );
//弹出(从容器里移出该元素和返回该元素)最前面的元素,如果没有存在该元素则会出错
array.popfirst( tt );
//弹出(从容器里移出该元素和返回该元素)最前面的元素,没有存在该元素就返回null而不会出错
array.safepopfirst( tt );
//弹出(从容器里移出该元素和返回该元素)最后面的元素,如果没有存在该元素则会出错
array.poplast( tt );
//弹出(从容器里移出该元素和返回该元素)最后面的元素,没有存在该元素就返回null而不会出错
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 );
}

