Анатомирование кода lua с помощью самого lua - PullRequest
0 голосов
/ 04 июля 2018

У меня есть файл конфигурации, написанный на lua, с видом данной структуры, что позже должно динамически создавать графический интерфейс:

-- Input config file
package.path = '?.fsl;'
require "init"

global_unit(mm)                    --   Global unit (m, cm, mm)
pickdist(0.001)                    --   Snap distance
cosys(polar)                       --   Set system of coordinates

-- Define model name, for filenames etc.
new_model_force(model_name,"from main.fsl")

-- Define FE Control Data
m.hc_min          =         95.000 --   Limit demagnetisa > 0:[%]Hc;<0:[kA/m]
m.con_hdcopy      =          1.000 --   Hc-copy:Name:auto:0;intact:1; none:-1
m.b_max           =          2.200 --   Max Induction [T] in colorgradation
m.b_min           =          0.000 --   Move inside: 0 ; Move outside: > 0

pre_models("FE-contr-data");

pre_models("connect_models");

-- Define the Basic Model Parameter
m.tot_num_slot    =             QS --   Number of slots               (>= 1)
m.num_poles       =          2 * p --   Number of poles 2p            (>= 2)
m.npols_gen       =         2*p*mf --   Number of poles simulated     (>= 1) --=m.num_poles * m.num_sl_gen / m.tot_num_slot
m.num_slots       =          QS*mf --   Number of slots in model
m.arm_length      =            lFe --   Effect. armature length          [mm]
m.fc_radius       =   (Di-delta)/2 --   Radius air-gap center            [mm] --=(m.inside_diam-ag)/2

pre_models("basic_modpar");

...

Все переменные m.whither принадлежат соответствующему выражению pre_models (...) ниже. Количество и имена переменных для каждого «pre_models (...) - block» иногда неизвестны, то же самое относится и к самому «pre_models (...) - block».

GUI должен показывать что-то. как:

Tab1 = General settings: global_unit -> mm, pickdist -> 0.001, etc.
Tab2 = FE-contr-data: m.hc_min -> 95.000, m.con_hdcopy -> 1.000, etc.
Tab3 = connect_models:
Tab4 = basic_modpar: m.tot_num_slot -> 36, m.num_poles -> 30, etc.

.. где QS = 36 и p = 15 определены в файле init.

Желание: Код не должен знать термины "FE-contr-data", global_unit (...) и т. Д.

Есть идеи, как подойти?

1 Ответ

0 голосов
/ 25 июля 2018

Я только отвечаю, потому что этот ответ не имеет ответа, поэтому его можно классифицировать как отвеченный.

Вам необходимо перехватить (используя metatable(_G)) доступ к pre_models() и запустить скрипт. Наконец, выведите сериализованный m при каждом вызове перехваченной версии pre_models().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...