Avatar

分类

最新留言

链接

lua中定义函数

2008年5月23日 08:05 | Comments(0) | Category:Lua | Tags:

在lua中可以这样定义函数

  -- add all elements of array `a'
    function add (a)
      local sum = 0
      for i,v in ipairs(a) do
        sum = sum + v
      end
      return sum
    end

调用是也需要带括号,即使没有参数也要带括号。特例是如果只有一个字符常量参数或者是一个table constructor,可以省略括号。如print "Hello World"

 print [[a multi-line    <-->     print([[a multi-line
     message]]                        message]])

f{x=10, y=20} 

lua为面向对象的函数调用提供了一个特殊语法,o:f(x)和o.f(o,x)意思相同。lua不检验实参的个数是否和形参匹配,多了被丢弃,少了就会设置为nil

假设一个如下定义的函数:

 function f(a, b) return a or b end

we will have the following mapping from arguments to parameters:
    CALL             PARAMETERS
      
    f(3)             a=3, b=nil
    f(3, 4)          a=3, b=4
    f(3, 4, 5)       a=3, b=4   (5 is discarded)

 

lua中可变数量参数的函数

2008年5月23日 07:45 | Comments(7) | Category:Lua | Tags:

在lua中定义一个可以接受可变数量参数的函数如下:

   printResult = ""
  
  function print (...)
  for i,v in ipairs(arg) do
  printResult = printResult .. tostring(v) .. "\t"
  end
  printResult = printResult .. "\n"
  end
   ...代表可变数量的参数,lua会把实际调用的参数组织成一个table,在函数中可以通过arg引用这个table,table和python中的dict,javascript中的对象类似,感觉应该是和javascript比较像,lua也是通过table实现了面向对象的功能,并且与javascript的prototype-based OO比较像。当然这个table除了实参外,还多了一个域名字为n,保存实参的个数。在lua中函数可以有多个返回值,可以local s1,s2=string.find(s, p) 获取多个返回值。用unpack函数可以把arg解开传给另外一个函数。

    在context中某个lua脚本文件里直接通过...调用另外一个函数,这和unpack的作用是否相同,还没发现有介绍,继续学习。

PS:刚开始学习lua脚本语言,只是把自己看到的记录下来,加深印象,错误在所难免。