aardio - 小窍门及注意事项收集贴

如果您有好的小经验,请在本帖下留言,我会编录进去,供更多朋友学习。 

关键词

描述

1 匿名函数返回值 λ()、lambda()  只能返回 个返回值,使用时需要注意。
2

函数中逐个参数进行处理的方法

一个函数中对所有参数逐个进行处理,除了在函数内部用for等类似语句遍历处理外,还可以采用函数递归的方式,将剩余的参数递归传递处理。如:

func = function( v , ... ){

        // 此处对第一个参数 v 进行处理。
        func( ... ); // 此处递归调用,实现对剩余的参数进行处理。
}

3 输出调试信息

console.debug() 输出调试信息,该函数在开发环境中会自动打开控制台,而发布后则不会。类似易语言中的 输出调试文本 ()、调试输出 ()。

4 操作Excel的方法

1、com.excel 库,需要系统中安装微软excel软件(使用其com接口),局限性较大。官方库封装的也较简单,适合简单的读写单元格数据。

2、access 库,使用ado驱动,一般系统中都已集成该驱动。适合把excel文件当数据库使用,对数据进行读写、排序、统计等复杂处理。

3、libxl 库,只需一个libxl.dll文件。aardio有好几个版本的libxl库。个人推荐godking.libxl,因为该库封装的功能比较全面,且为了实现简捷操作和良好容错,做了很多优化工作。适合对文件的数据、格式等进行处理。

4、使用dida表格等可以导入excel数据的表格组件,读写excel文件。有特殊需求的可以尝试使用,比如需要显示数据、调试打印的。

5、风行者封装的npoi库,调用c#dll实现。

5 System.ValueTuple使用注意事项

1、使用 .Create() 创建 ValueTuple 时,最多支持8个参数(成员)。

2、aardio只能通过参数自动匹配 .NET 泛型函数。
3、ValueTuple 前7个元素可使用字段 .Item1.Item7 访问。
4、第 8 个元素访问方法:通过 Rest 字段放到下一个 ValueTuple 里,tuple.Rest.Item1

5、遍历 tuple:
for i,v in System.ValueTuple.each(tuple){
    console.log(i,v);
}

6 类内调用外部变量的方法

namespace aaa 
var var1 = "我是一个名字空间局部变量"
var2 = "我是一个名字空间成员变量1"
self.var3 = "我是一个名字空间成员变量2"
..var4 = "我是一个全局变量"
class bbb{
    ctor( /*输入构造函数所需要的参数*/ ){
        console.dump(var1);
        console.dump(..aaa.var2);
        console.dump(..aaa.var3);
        console.dump(..var4);
    };
}

7 string.split模式匹配

string.split("",'\r\n'

'\r\n' 使用的是模式匹配,意思是  \r 或 \n ,很容易 误解为 \r+\n 

string.split("",'<\r\n>'

'<\r\n>' 使用的是非模式匹配,意思是 \r+\n

8 table.gc()

经测试,析构函数中调用的对象,如果发生改变,会导致执行析构函数程序闪退。

所以,如果要在析构函数中释放对象,最好保证该对象在设置好析构函数后不会发生改变。

9 tabs.loadForm()

win.ui.tabs组件,loadForm加载的窗口,在切换后,并不会关闭,而是隐藏。当再次切换回来后,窗口各控件还是保持原来的数据,并不会重新加载。

如果需要每次打开窗口时重新加载数据,可使用mainForm.custom.loadForm()

10 io["open"]()io.open()

当你使用索引操作符调用成员函数 io["open"]() 时,被调用函数的 owner 参数为

所以一般不应当写 io["open"]() ,而应当写 io.open()

如果要给 io["open"]() 加上owner,可以使用 call:

call ( io["open"], io );

11 wb.external 使用方法

import web.view
var wb = web.view(winform.custom)
//external必须在go之前赋值,内部的函数或常量都是promise对象,必须用异步方法async/await或then取回结果
wb.external = {    str =  "123"; }
wb.go("about:blank")

//eval会返回执行结果,所以会等待代码执行完毕,所以str的值是按顺序显示的
wb.eval("aardio.str.then(e=>{alert(e)})") //这里会显示123

//eval会返回执行结果,所以会等待代码执行完毕,所以str的值是按顺序显示的
wb.external.str =  "456";
wb.eval("aardio.str.then(e=>{alert(e)})") //这里会显示456

//doScript是不用返回结果的,所以不会阻塞线程执行,所以str的值并不一定是当前值
wb.external.str =  "789";
wb.doScript("aardio.str.then(e=>{alert(e)})") //这里会显示000

//doScript是不用返回结果的,所以不会阻塞线程执行,所以str的值并不一定是当前值
wb.external.str =  "000";
wb.doScript("aardio.str.then(e=>{alert(e)})") //这里会显示000

你可能感兴趣的:(aardio,aardio)