分享

扩展标准库而不是修改标准库

 只怕想不到 2021-09-14

有一些用户反馈这个问题时还能保持礼貌,而有一些用户就直接飙脏话对我进行辱骂,仿佛更新标准库 —— 侵犯了他什么神圣的权利。

我今天特别解释一下这个问题:

1、aardio 并没有自动升级的功能,一定是你手动点击更新 —— 标准库才会更新。如果你主动去更新标准库,又不想标准库被更新,这是非常矛盾的一个需求。

2、如果你想扩展标准库的功能,你并不需要修改标准库。只要简单的增加一个新的库,继承并扩展原来的库函数即可。


我举个简单的例子,例如我现在想扩展一下 com.excel 里的 SaveAs 函数,增加保存 pdf 的功能,那么可以新建一个库,我随便取个名字,例如就叫 com.excel2,然后我们编写代码如下:

import com.excel;namespace com{   class excel2{    ctor( ... ){      this = ..com.excel( ... )    };  }  SaveAs = function(path,format){ if(!#path) error('请指定保存路径',2); if(format===null){ var ext = ..string.match(path,'[^.]+$'); if( ext ){ format = ( { pdf = 0/*_xlTypePDF*/; xps = 1/*_xlTypeXPS*/; xls = 0x2B/*_xlExcel9795*/; xlsx = 0x33/*_xlOpenXMLWorkbook*/; xlsm = 0x2E/*_xlXMLSpreadsheet*/; xlsb = 0x32/*_xlExcel12*/; } ) [..string.lower(ext)]; }; } path = ..io.fullpath(path); if(format<=1) return owner.ActiveWorkbook.ExportAsFixedFormat(format,path); return owner.ActiveWorkbook.SaveAs(path,format ); };}/**intellisense()com.excel2() = 创建 Excel 对象\n!excel.end intellisense**/

你可能会想为什么不直接加到标准库呢?!首先 Excel 存为 pdf 是个不常见的操作 ,90%的人用不到你的代码却要执行你的代码其实也不公平。另外你要更愉快地保存为 pdf ,其实还有个更复杂的 ExportAsFixedFormat2 函数,复杂到你可以去实现一个新的库 —— 可能代码比 com.excel 还要长。我们编写标准库 —— 就要随时控制我们可能无限膨胀的欲望,保持一个库主要只做一件事。

上面是一个类库,如果是普通的静态名字空间,扩展就更容易,例如我们要在 console 库里增加一个 log2 函数,可以增加一个库叫 console2 ,然后代码这样写:

import consoleconsole2 = console;
console2.log2 = function(...){ }


那么如果你要对标准库进行较大的修改,或者改动一些库文件内部私有函数要怎么办呢?!这时候你也可以直接复制标准库的源代码,改一个库名称,然后想怎么改就怎么改。

真的任何时候你都完全没有必要去直接改动标准库文件。我们编程就是解决各种各样的问题,而不是给自己不必要地制造麻烦。

不要误解:aardio 不是不愿意改进标准库,实际上 aardio 更新非常活跃,我仅仅是想提醒大家 —— 不要局限于用标准库解决问题。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多