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
时间: 2024-07-28 15:11:33

Lua参数绑定函数实现方法的相关文章

ios开发Swif语言基本的参数、函数、方法的定义和调用

把老师讲得知识和大家分享下咯,希望大家提出疑问,这是我综合自己理解和老师讲得敲出来的! //var str = "Hello, playground" //定义变量 let a0:Int = 5; //定义函数 func test() { print("asdfg") } test() //定义带参数并且有返回值的参数 func test1(a: Int) ->Int { return 100; } test1(100) //Swift 语言代码后面可以加;结

【SpringMVC学习05】SpringMVC中的参数绑定总结

众所周知,springmvc是用来处理页面的一些请求,然后将数据再通过视图返回给用户的,前面的几篇博文中使用的都是静态数据,为了能快速入门springmvc,在这一篇博文中,我将总结一下springmvc中如何接收前台页面的参数,即springmvc中的参数绑定问题. 1. 参数绑定的过程 我们可以回忆一下,在struts2中,是通过在Action中定义一个成员变量来接收前台传进来的参数,而在springmvc中,接收页面提交的数据是通过方法形参来接收的.从客户端请求的key/value数据,经

【SpringMVC学习05】SpringMVC中的参数绑定总结——较乱后期准备加入 同一篇幅他人的参数绑定

众所周知,springmvc是用来处理页面的一些请求,然后将数据再通过视图返回给用户的,前面的几篇博文中使用的都是静态数据,为了能快速入门springmvc,在这一篇博文中,我将总结一下springmvc中如何接收前台页面的参数,即springmvc中的参数绑定问题. 本篇建议不敲代码 只是看看 因为无法很好衔接 上一篇: 1. 参数绑定的过程 我们可以回忆一下,在struts2中,是通过在Action中定义一个成员变量来接收前台传进来的参数,而在springmvc中,接收页面提交的数据是通过方

SpringMVC中的参数绑定总结

众所周知,springmvc是用来处理页面的一些请求,然后将数据再通过视图返回给用户的,前面的几篇博文中使用的都是静态数据,为了能快速入门springmvc,在这一篇博文中,我将总结一下springmvc中如何接收前台页面的参数,即springmvc中的参数绑定问题. 1. 参数绑定的过程 我们可以回忆一下,在struts2中,是通过在Action中定义一个成员变量来接收前台传进来的参数,而在springmvc中,接收页面提交的数据是通过方法形参来接收的.从客户端请求的key/value数据,经

理解Python函数和方法

什么是函数? 函数是抽象出的一组执行特定功能的重复代码,通俗理解,就是对一些重复的工作进行封装和然后直接调用,避免重复造轮子. Python中的函数如何定义? 使用def关键字,结构如下: def 函数名(参数列表): 函数体 return语句(可省略) 其中return 语句表示函数的结束,在函数内部return语句后的语句不会执行,return关键字后面客户以跟变量,表达式等表示向函数调用方的返回值,也可以不加变量或者直接省略return语句,表示向函数调用方返回None对象. 函数如何调用

boost在lambda表达式中调用占位符参数的成员函数的方法

boost中提供了lambda表达式的用法,但是lambda表达式的功能还不是很强大,在其中只能对lambda的占位符参数_1等使用最基本的操作符,如+-*/,可是很多时候如果传入的占位符参数是一个对象指针的话,我们可能想要调用这个类的成员函数. 我在开发中遇到了这个问题,需要在stl的算法中传入一个函数来调用对象的比较函数,因为感觉这样太麻烦,还需要重新定义一个函数,所以想起了lambda表达式,c++11的lambda表达式我倒是没试过,可是受项目开发环境所限,只能选择boost.但是我用的

使用MethodType函数将方法绑定到类或实例上

在开始正文之前,需要了解下Python的绑定方法(bound method)和非绑定方法. 简单做个测试: 定义一个类,类中由实例方法.静态方法和类方法. class ClassA: def instance_method(self): print('instance_method', self) @classmethod def cls_method(cls): print('cls_method', cls) @staticmethod def static_method(): print(

SpringMvc参数绑定出现乱码解决方法

在SpringMvc参数绑定过程中出现乱码的解决方法 1.post参数乱码的解决方法 在web.xml中添加过滤器 <!-- 过滤器 处理post乱码 --> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class

黑马程序员---OC基础2【对象储存】【函数和方法的区别】【方法和对象关系】【对象作为方法参数】【NSString类介绍】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- [对象储存] 1.对象的储存细节 [Car  new] new做了3件事 1)向计算机申请存储空间 2)给类中的每一个成员初始化值 3)返回新申请的空间的首地址 (1).申请的空间在内存的哪个区? new 的时候申请的空间内存的堆区(程序动态分配的内存空间) 当new内存的布局: 初始化的时候: 如果实例变量是基本数据类型,此时给初始为0, 如果是字符串类型此时初始化为null (2).实例变