【问题标题】:Passing variable names to functions将变量名称传递给函数
【发布时间】:2017-07-21 14:59:41
【问题描述】:

我有一个应用程序和一些有效的代码,但我想让它成为一个可调用的函数,例如:-

tankFunction("tank1") 这样下面的函数(有效)将能够根据输入的参数"tank1""tank2""tank3" 等在任何坦克上工作..

所以基本上现有函数中包含的每个变量都代表输入参数:

tank1CoolManCtrlOn = reg.tank1CoolManCtrlOn 

目前,上述两个变量仅针对"tank1" 进行编码,如果将"tank2" 传递给tankfucntion,例如tankfunction("tank2"),则变量需要为:

tank2CoolManCtrlOn = reg.tank2CoolManCtrlOn

因此变量将是####CoolManCtrlon = reg.####CoolManCtrlOn,其中#### 是需要输入参数的位置。

创建这些变量后,需要将它们传递给tank() 函数,然后需要将返回值设置到输出寄存器。

function tank1Function()  
--Tank1 - Start
--This is the Control Function Block Call for - Tank1

--Below is where each variable is set for the function block call.
tank1CoolManCtrlOn = reg.tank1CoolManCtrlOn
tank1CoolManCtrlOff = reg.tank1CoolManCtrlOff
tank1HeatManCtrlOn = reg.tank1HeatManCtrlOn
tank1HeatManCtrlOff = reg.tank1HeatManCtrlOff
tank1PV = reg.tank1PV
tank1SV = reg.tank1SV
tank1Debounce = reg.tank1Debounce
tank1Hysteresis = reg.tank1Hysteresis
tank1LowAlm = reg.tank1LowAlm
tank1HighAlm = reg.tank1HighAlm
tank1CoolManIND = reg.tank1CoolManIND
tank1HeatManIND = reg.tank1HeatManIND
tank1Mode = reg.tank1Mode
tank1CTRLType = reg.tank1CTRLType

--This is the function block call for Tank1 where each parameter is set.
 tank1CoolManIND1, tank1HeatManIND1, tank1CoolManCtrlOn1,
 tank1CoolManCtrlOff1, tank1HeatManCtrlOn1, tank1HeatManCtrlOff1  = 
 tank(tank1CoolManCtrlOn, tank1CoolManCtrlOff, tank1HeatManCtrlOn, 
 tank1HeatManCtrlOff, tank1PV, tank1SV, tank1Debounce, tank1Hysteresis, 
 tank1LowAlm, tank1HighAlm, tank1CoolManIND, tank1HeatManIND, tank1Mode, 
 tank1CTRLType) 

 --This is where the results of the function block set the required  
 --Variables.
 reg.tank1CoolManIND = tank1CoolManIND1
 reg.tank1HeatManIND = tank1HeatManIND1
 reg.tank1CoolManCtrlOn = tank1CoolManCtrlOn1 
 reg.tank1CoolManCtrlOff =  tank1CoolManCtrlOff1
 reg.tank1HeatManCtrlOn =  tank1HeatManCtrlOn1
 reg.tank1HeatManCtrlOff = tank1HeatManCtrlOff1
--Tank1 - End  

 end

【问题讨论】:

    标签: function lua


    【解决方案1】:

    您的变量名称有很多重复,这意味着您可以轻松地在嵌套表中表示您的坦克。

    local tanks = {{}, {}, {}}
    local reg = {tanks = {{}, {}, {}}}
    
    local function tank(t)
      return {
        -- Calculate fields from t.
      }
    end
    
    local function tankFunction(i)
      tanks[i] = reg.tanks[i]
      reg.tanks[i] = tank(tanks[i])
    end
    
    tankFunction(1)
    

    tank 表将包含 PVSVDebounce 等键。

    【讨论】:

      猜你喜欢
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 2019-07-30
      • 1970-01-01
      • 2019-07-22
      • 2020-01-13
      相关资源
      最近更新 更多