加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

定义函数参数的默认值

发布时间:2020-12-15 00:07:12 所属栏目:大数据 来源:网络整理
导读:在Lua wiki中我找到了一种方法来定义缺少参数的默认值: function myfunction(a,b,c) b = b or 7 c = c or 5 print (a,c)end 这是唯一的办法吗? PHP样式myfunction(a,b = 7,c = 5)似乎不工作。不是Lua的方式不工作,我只是想知道这是否是唯一的方法。 解
在Lua wiki中我找到了一种方法来定义缺少参数的默认值:
function myfunction(a,b,c)
    b = b or 7
    c = c or 5
    print (a,c)
end

这是唯一的办法吗? PHP样式myfunction(a,b = 7,c = 5)似乎不工作。不是Lua的方式不工作,我只是想知道这是否是唯一的方法。

解决方法

如果你想要命名参数和默认值,如PHP或Python,你可以使用表构造函数调用你的函数:
myfunction{a,b=3,c=2}

(这在Lua的许多地方看到,如the advanced forms of LuaSocket’s protocol modules和IUPLua的构造函数。)

函数本身可以有这样的签名:

function myfunction(t)
    setmetatable(t,{__index={b=7,c=5}})
    local a,c =
      t[1] or t.a,t[2] or t.b,t[3] or t.c
    -- function continues down here...
end

参数表中缺少的任何值都将从其metatable中的__index表中获取(参见the documentation on metatables)。

当然,使用表构造函数和函数可以使用更高级的参数样式 – 你可以写任何你需要的。例如,here是构造从定义参数名称和默认值的表中获取命名或位置参数表的函数的函数,以及采用正则参数列表的函数。

作为非语言级功能,可以更改此类调用以提供新的行为和语义:

>可以使变量接受多个名称
>位置变量和关键字变量可以是散布的 – 并且定义两者可以优先(或导致错误)
>可以进行关键字无位置变量,以及无名位置
>相当冗长的表构造可以通过解析字符串来完成
>如果函数使用除了1表以外的函数调用,则可以逐字使用参数列表

一些用于写参数翻译器的有用函数是unpack(在5.2中移动到table.unpack),setfenv(在5.2中用新的_ENV结构不推荐使用)和select(返回给定参数列表中的单个值,列表与’#’)。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读