zoukankan      html  css  js  c++  java
  • Lua 函数参数 & 默认实参

    【1】Lua函数,默认实参

    习惯了其他语言(如C++)的默认实参,利用Lua语言的过程中,发现没有默认实参这种机制。

    所以,自己模拟了一个满足业务需求的带默认实参的函数。

    (1)示例如下:

     1 local function func(arg1, arg2)
     2 
     3     if nil == arg2 then
     4         arg2 = true
     5     end
     6 
     7     if arg1 then
     8         print('arg1 value : ' .. arg1)
     9     else
    10         print('arg1 is false or nil')
    11     end
    12 
    13     if arg2 then
    14         print('arg2 value : ' .. (type(arg2) == 'boolean' and 'true' or arg2) .. '
    ')
    15     else
    16         print('arg2 value : false
    ')
    17     end
    18 
    19 end
    20 
    21 -- test
    22 func('123')
    23 func('456', 'abc')
    24 func('lua', false)
    25 func('web', true)
    26 -- func(,true)
    27 func('study')
    28 
    29 --[[
    30 arg1 value : 123
    31 arg2 value : true
    32 
    33 arg1 value : 456
    34 arg2 value : abc
    35 
    36 arg1 value : lua
    37 arg2 value : false
    38 
    39 arg1 value : web
    40 arg2 value : true
    41 
    42 arg1 value : study
    43 arg2 value : true
    44 --]]

    (2)分析过程:

        如果调用函数时,如果没有实参值,lua语言会认为这个实参值为nil。

        利用Lua语言的这一特性,可以模拟实现默认实参函数。

        2.1 如上22行

           对func的调用时,没有为第二个参数arg2赋值,遵循Lua语言的语法,说明第二个参数的值为nil。

           在函数内部对nil值进行判断,若没有赋实参值,估可以认为欲利用默认实参值,将默认实参值赋值于参数2即可。

        2.2 如上24行

           对func的调用时,为第二个参数arg2赋值false,遵循Lua语言的语法,说明第二个参数的值为false。

           在函数内部对nil值进行判断,既然已赋实参值,那么肯定不是nil,其他逻辑直接使用实参值即可。

        2.3 如上25行,与24行同理。

        2.4 如上26行,不允许此种写法!说明Lua语言同其他语言一致,遵循同样的原则,如果参数有”默认实参值“,只允许从最后的参数赋值。

           若不理解此条,可以学习一下C++语言的默认实参机制。可参见随笔《为什么C++函数的形参默认值从最末一个赋值?

        2.5 如上27行,与22行同理。

    (3)总结:

        穷则思,思则变,变则通,通则达。

    Good Good Study, Day Day Up.

    顺序 选择 循环 总结

  • 相关阅读:
    %取余的用法
    数据结构总结
    【OpenCV】访问Mat中的每个像素值
    逻辑运算的妙用-Single Number
    Android EditText设置为Number类型后获取数字
    XX.exe 系统找不到指定文件
    error LNK2001: unresolved external symbol _main
    [c++] opencv加载png
    CDH 不能监控hadoop状态
    GoLang安装
  • 原文地址:https://www.cnblogs.com/Braveliu/p/10737235.html
Copyright © 2011-2022 走看看