搜索
查看: 247|回复: 0

分享:保存为字符串的aar函数代码,可以通过loadcode() 来执行此函数

[复制链接]

39

主题

174

帖子

1028

积分

荣誉会员

htmlayout.cn 我的学习笔记

Rank: 8Rank: 8

积分
1028
发表于 2018-8-27 21:42:41 | 显示全部楼层 |阅读模式
最近有个项目里需要外置一些处理协议,来处理获取到的数据,这样客户就可以自己修改或者模仿协议自己来定义处理规则了。

查看了帮助手册,loadcode可以满足要求,并且有示例,于是依葫芦画瓢,大概的学习了下这个功能。
下面是学习和思考的过程,希望和我一样的新手可以少走弯路。^_^

假定我有一个txt的文档,里面是一个数据处理协议,那么我需要把这个txt里面的代码读出来,读出来当然就是字符串格式了,于是
  1. import console;

  2. var sss=/******
  3. xieyi = function(str){
  4.     var dataStr = string.left(string.replace(str,"\s",""),4);
  5.     var ret = (10-tonumber(dataStr)*0.01);   
  6.     return ret;
  7. }

  8. ******/


  9. var xx = loadcode(sss)

  10. console.varDump(xx())


  11. console.varDump(xieyi("50 01"))

  12. console.pause(true);
复制代码

执行结果:

学习的过程中,需要注意几点:
  1. 1,可以在字符串里添加

  2.     var str1,str2 = ...

  3.     来动态的获取外部提供的输入数据,但是这个数据需要在xx(str1,str2)的时候写

  4. 2,函数只需要执行一次xx()初始化,之后就可以无限制的使用xieyi()函数了。
复制代码


那么如果字符串中是一个多维度Tab表,而且表里有字符串和函数,那么这个协议可以更灵活
  1. import console;

  2. var sss=/******
  3. xxtab={
  4.         {
  5.         geshi = "41";
  6.         xieyi = function(str){
  7.             var dataStr = string.left(string.replace(str,"\s",""),4);
  8.             var ret = (10-tonumber(dataStr)*0.01);   
  9.             return ret;
  10.             }
  11.         };
  12.         {
  13.         geshi = "a3 50 01";
  14.         xieyi = function(str){
  15.             var dataStr = string.left(string.replace(str,"\s",""),4);
  16.             var ret = (tonumber(dataStr,16)*0.01 -100);
  17.             return ret;
  18.             }
  19.         }
  20. }



  21. ******/


  22. var xx = loadcode(sss)

  23. console.varDump(xx())

  24. console.varDump(xxtab[1].geshi)
  25. console.varDump(xxtab[1].xieyi("50 01"))

  26. console.varDump(xxtab[2].geshi)
  27. console.varDump(xxtab[2].xieyi("50 01"))

  28. console.pause(true);
复制代码

执行结果如下:


再次偷懒到底,如果把loadcode()改为loadcodex(),那么就可以少写一个执行初始化的语句了
  1. import console;

  2. var sss=/******
  3. xxtab={
  4.         {
  5.         geshi = "41";
  6.         xieyi = function(str){
  7.             var dataStr = string.left(string.replace(str,"\s",""),4);
  8.             var ret = (10-tonumber(dataStr)*0.01);   
  9.             return ret;
  10.             }
  11.         };
  12.         {
  13.         geshi = "a3 50 01";
  14.         xieyi = function(str){
  15.             var dataStr = string.left(string.replace(str,"\s",""),4);
  16.             var ret = (tonumber(dataStr,16)*0.01 -100);
  17.             return ret;
  18.             }
  19.         }
  20. }



  21. ******/

  22. //改为loadcodex之后,就会立即初始化一次这个函数,就不用手动xx()了
  23. var xx = loadcodex(sss)
  24. //console.varDump(xx())

  25. console.varDump(xxtab[1].geshi)
  26. console.varDump(xxtab[1].xieyi("50 01"))

  27. console.varDump(xxtab[2].geshi)
  28. console.varDump(xxtab[2].xieyi("50 01"))

  29. console.pause(true);
复制代码


ok,结束,这里已经实现了我的所有的需求了,于是就没有再深入研究。
用这个loadcode感觉应该可以实现很多和用户自定交互的功能了。
! www.HtmLayout.Cn 我的学习笔记
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-10-23 08:43 , Processed in 0.062500 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表