Lua参数绑定函数实现方法
2016-11-19 00:17
489 查看
背景
对于某一个函数, 其被调用多次, 每次调用的入参都是一致的。不想每次都填写参数, 如果能够定义一个新的函数, 将参数跟此函数绑定就棒哒哒了。
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
相关文章推荐
- [置顶] 在js中如何实现方法重载?以及函数的参数问题
- __call 实现函数方法不同参数个数的重载
- jQuery支持动态参数将函数绑定到事件上的方法
- springMVC使用HandlerMethodArgumentResolver 自定义解析器实现请求参数绑定方法参数
- 写一方法计算实现任意个整数之和.在主调函数中调用该函数,实现任意个数之和。(使用params参数)
- springMVC使用HandlerMethodArgumentResolver 自定义解析器实现请求参数绑定方法参数
- springMVC使用HandlerMethodArgumentResolver 自定义解析器实现请求参数绑定方法参数
- lua脚本语言的学习-----------------如何实现c++无参数的函数在lua中调用
- SpringMVC3,使用RequestMappint的Param参数,实现一个url绑定多个方法
- 在VBScript中实现-函数/方法名作为参数传入另一个函数
- 在js中如何实现方法重载?以及函数的参数问题
- springMVC使用HandlerMethodArgumentResolver 自定义解析器实现请求参数绑定方法参数
- SpringMVC3,使用RequestMappint的Param参数,实现一个url绑定多个方法
- JS函数arguments数组获得实际传参数个数的实现方法
- 在VBScript中实现-函数/方法名作为参数传入另一个函数
- JQuery 绑定事件时传递参数的实现方法
- js函数参数设置默认值的一种变通实现方法
- SpringMVC3,使用RequestMappint的Param参数,实现一个url绑定多个方法
- C标准库学习--可变参数函数的实现方法
- springMVC使用HandlerMethodArgumentResolver 自定义解析器实现请求参数绑定方法参数