lua如何实现 静态变量,多次调用同一个函数时,只初始化一次指定的变量值 没什么分,谢谢帮忙

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lua如何实现 静态变量,多次调用同一个函数时,只初始化一次指定的变量值 没什么分,谢谢帮忙相关的知识,希望对你有一定的参考价值。

比如
我这里要多次调用test()函数

function test()
local i=0;
if (i<5) then
i=i+1
end;
end;

在Lua 中有两种比较常用的方法 实现 类似 C语言 static 变量的方法

其中利用闭合函数 是《Lua程序设计》(《Programming in Lua》)推荐用法

 


--利用全局变量实现 static variable
local function staic_test()
    n = n or 0;
    n = n + 1;
    return n;
end
print(staic_test())
print(staic_test())

--利用闭合函数 (closure) 实现 static variable
local function staic_test2()
    local i = 0;
    return function()
              i = i + 1;
              return i;
           end
end
staicor = staic_test2();
print(staicor())
print(staicor())

参考技术A 1、把内容单独放一个文件里lua文件里
local i = 0
function test()
if (i<5) then
i=i+1
end;
end;
2、或者写个生成函数
function create_test()
local i = 0
return function() if(i<5) then i=i+1 end end
end
test = create_test()
然后多次调test就行了。本回答被提问者采纳

Lua参数绑定函数实现方法

背景

对于某一个函数, 其被调用多次, 每次调用的入参都是一致的。

不想每次都填写参数, 如果能够定义一个新的函数, 将参数跟此函数绑定就棒哒哒了。

local function pirntfunc(...)
    local args = {...}

    for _,arg in pairs(args) do
        print(arg)
    end
end


pirntfunc(1, 2)
pirntfunc(1, 2)
pirntfunc(1, 2)
pirntfunc(1, 2)

-- can we have printFunc12, equivalent to printFunc called with 1,2
pirntfunc12()

 

类似javascript function.bind功能:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

function list() {
  return Array.prototype.slice.call(arguments);
}

var list1 = list(1, 2, 3); // [1, 2, 3]

// Create a function with a preset leading argument
var leadingThirtysevenList = list.bind(null, 37);

var list2 = leadingThirtysevenList(); 
// [37]

var list3 = leadingThirtysevenList(1, 2, 3);
// [37, 1, 2, 3]

 

解法

local function pirntfunc(...)
    local args = {...}

    for _,arg in pairs(args) do
        print(arg)
    end
end


pirntfunc(1, 2)


local function makePrintFunc(...)
    local args = {...}

    return function()
        pirntfunc(unpack(args))
    end
end

local printfuncBindedArg = makePrintFunc(4, 5)
printfuncBindedArg()

 

LOG:

>lua -e "io.stdout:setvbuf ‘no‘" "test.lua" 
1
2
4
5

 

以上是关于lua如何实现 静态变量,多次调用同一个函数时,只初始化一次指定的变量值 没什么分,谢谢帮忙的主要内容,如果未能解决你的问题,请参考以下文章

static 函数中的静态变量

静态变量

Lua和C#调用探秘

静态变量赋值问题

9.PHP中的静态变量

Java的静态块和初始化块分别何时执行?有啥区别?