Lua学习笔记(二)

1. 字符串处理

去除字符串首尾的空格

function trim(s)
  return (string.gsub(s, "^%s*(.-)%s*$", "%1")) 
end

格式化字符串, 返回一个类似printf的格式化字符串


> print( string.format("the value is:%d",4) )
the value is:4

"…"操作符链接字符串

> print("\"Lua\"".." is a script program" .. " langue")
"Lua" is a script program langue
2. 函数

调用函数的时候,如果参数列表为空,必须使用()表明是函数调用。 当函数只有一个参数并且这个参数是字符串或者表构造的时候,()可有可无,例如

> print "Hello World"      -->       print("Hello World"
Hello World

函数闭包
当一个函数内部嵌套另一个函数定义时,内部的函数体可以访问外部的函数的局部变量,这种特征我们称作词法定界。
先看如下代码:

function fn()
    local i = 0
    return function()     -- 注意这里是返回函数的地址,不是执行
       i = i + 1
        return i
    end
end
 
c1 = fn()    -- 接收函数返回的地址
print(c1())  --> 1          --c1()才表示执行
print(c1())  --> 2

有点类似于C++中的 静态局部变量, i每次调用的时候值会保持。

可以用来实现一个迭代器, 如:

array = {"Google", "Runoob"}

function elementIterator (collection)
   local index = 0
   local count = #collection
   -- 闭包函数
   return function ()
      index = index + 1
      if index <= count
      then
         return collection[index]   --  返回迭代器的当前元素
      end
   end
end

for element in elementIterator(array)
do
   print(element)
end

你可能感兴趣的:(Lua)