如何使外部Lua模块访问Simion工作台程序的Segment变量?
如何让Simion的Segment变量对外部Lua模块可见
方案1:直接传递参数(推荐,模块化最佳实践)
这是最清晰且低耦合的方式,把需要的Segment变量作为参数传给模块函数:
修改test.lua:
test = {} function test.print_ion_number(ion_num) print("ion number = ", ion_num) end return test
在工作台程序中调用时传入ion_number:
test = require "test" simion.workbench_program() function segment.other_actions() test.print_ion_number(ion_number) end
方案2:将模块函数挂载到Segment表(适合多变量访问场景)
如果你的模块需要访问多个Segment变量,逐个传参太繁琐,可以把模块函数挂载到segment表中。这样函数执行时会自动继承segment的环境,直接访问其中的变量:
保持test.lua不变:
test = {} function test.print_ion_number() print("ion number = ", ion_number) end return test
修改工作台程序:
simion.workbench_program() test = require "test" -- 将模块函数挂载到segment表 segment.print_ion_number = test.print_ion_number function segment.other_actions() segment.print_ion_number() end
方案3:手动设置函数环境(Lua 5.1/Simion 8适用,不推荐长期使用)
通过setfenv函数直接把模块函数的环境设置为segment的环境,这样函数就能直接访问segment中的变量。但这种方式会让模块和segment强耦合,降低模块的复用性,仅适合临时测试:
保持test.lua不变,修改工作台程序:
simion.workbench_program() test = require "test" -- 将模块函数的环境设置为segment setfenv(test.print_ion_number, segment) function segment.other_actions() test.print_ion_number() end
内容的提问来源于stack exchange,提问作者Oleg
相关产品推荐
相关产品推荐

