用 Lua 本身解剖 Lua 代码

我有一个用 Lua 编写的配置文件,具有给定的结构,稍后应该动态创建 GUI:

-- 输入配置文件
package.path = '?.fsl;'
require "init"

global_unit(mm)                    --   全局单位 (m, cm, mm)
pickdist(0.001)                    --   捕捉距离
cosys(polar)                       --   设置坐标系

-- 定义模型名称,用于文件名等
new_model_force(model_name,"from main.fsl")

-- 定义有限元控制数据
m.hc_min          =         95.000 --   极限去除磁化 > 0:[%]Hc;<0:[kA/m]
m.con_hdcopy      =          1.000 --   Hc-复制:名称:自动:0;完好:1; 无:-1
m.b_max           =          2.200 --   最大诱导 [T] 在色阶化中
m.b_min           =          0.000 --   在内部移动:0; 在外面移动:>0

pre_models("FE-contr-data");

pre_models("connect_models");

-- 定义基本模型参数
m.tot_num_slot    =             QS --   槽数量  (>= 1)
m.num_poles       =          2 * p --   极数 2p            (>= 2)
m.npols_gen       =         2*p*mf --   数量极模拟   (>= 1) --=m.num_poles * m.num_sl_gen / m.tot_num_slot
m.num_slots       =          QS*mf --   模型中的槽数量
m.arm_length      =            lFe --   有效臂长 [mm]
m.fc_radius       =   (Di-delta)/2 --   空气间隙中心半径 [mm] --=(m.inside_diam-ag)/2

pre_models("basic_modpar");

...

所有 m.whatever 变量都属于下面的相应 pre_models(...) 语句。 每个“pre_models(...) - 块”的变量数量和名称有时是未知的,对“pre_models(...) - 块”本身也是如此。

GUI 应该显示如下内容:

Tab1 = 一般设置:全局单位 -> mm,pickdist -> 0.001,等等。
Tab2 = FE-contr-data:m.hc_min -> 95.000,m.con_hdcopy -> 1.000,等等。
Tab3 = 连接模型:
Tab4 = basic_modpar:m.tot_num_slot -> 36,m.num_poles -> 30,等等。

其中 QS = 36 而 p = 15 在 init 文件中定义。

愿望:代码不必知道术语“FE-contr-data”,global_unit(...) 等。

如何解决这个问题?

点赞
用户9190768
用户9190768

我只回答这个问题,因为这个答案没有答案,所以可以被归类为已回答。

你需要拦截(使用metatable(_G))对pre_models()的访问并运行脚本。最后,在每次拦截版本的pre_models()调用时打印一个序列化的m

2018-07-25 15:46:07