Lua语言基础

lua

基础

用 C 语言编写,编译后仅仅100k左右,方便嵌入到其他程序中。
参考教程

执行方式

lua helloWorld.lua
./hello.lua

语法

文件头
#!/user/local/bin/lua    
注释
--单行注释
--[[
多行注释
--]]
变量
-- local 表示局部变量,作用域到 end 为止,不写 local 表示全局变量
local a
print(type(a))           --结果为 nil,lua 中用 nil 表示空
type(a) == nil           --结果为 false
type(a) == "nil"         --结果为 true

--字符串操作
len = "www.run" .. "oob.com" 
print(#len)  --结果为14

--定义表(类似PHP array),以及遍历元素,tab1会自动排序,返回顺序和赋值顺序不同
--lua索引默认从 1 开始
local tab1 = { key1 = "val1", key2 = "val2", "val3" }

--nil可以用于删除元素,经过下面的操作,重新打印将不再显示 key1
tab1.key1 = nil  
遍历表
for k, v in pairs(tab1) do
    print(k .. " - " .. v)
end
--其中 pairs 是迭代器,迭代中涉及迭代函数(获取下一个值的函数),状态常量(数组),控制变量(变量的index)。
--无状态迭代器,通过状态常量和控制变量获取下一个数组的值,并返回更新的控制变量
--多状态迭代器,将数组作为迭代器的状态常量,所有信息存储在其中,利用闭包函数进行迭代。
--闭包函数是将函数 A 的返回值设置为一个函 数B,函数 B 继续保持着对于函数A中定义的变量的引用,从而实现迭代
条件语句
--if 语句
if false or nil then
    print("至少有一个是 true")
else
    print("false 和 nil 都为 false!")
end
函数
--local表示局部函数,否则默认全局
local function factorial1(n)
    if n == 0 then
        return 1
    else
     --可以返回多个值,使用 , 分隔,如果接收的多于返回的用nil填充,少于时返回的会被丢掉
        return n * factorial1(n - 1)      
	end
end

print(factorial1(5))
factorial2 = factorial1
print(factorial2(5))   --可以存在变量中,然后调用

--可变参数函数
function average(...)
   local arg={...}    --> arg 为一个表,局部变量
   local argNum = select("#",...)
   local argN_Num = select(n, ...)
end
print("平均值为",average(10,5,3,4,5,6))
函数库

定义一个包,相当于C语言中的库,但是实际上就是一个table,使用 require(“module”)的方式调用

-- 定义一个名为 module 的模块
module = {}
-- 定义一个常量
module.constant = "这是一个常量"
-- 定义一个函数
function module.func1()
    io.write("这是一个公有函数!\n")
end

require
require 用于搜索 Lua 文件的路径
搜索路径存放在全局变量 package.path 中,当 Lua 启动后,会以环境变量 LUA_PATH 的值来初始这个环境变量。如果没有找到该环境变量,则使用一个编译时定义的默认路径来初始化。

当然,如果没有 LUA_PATH 这个环境变量,也可以自定义设置,在当前用户根目录下打开 .profile 文件(没有则创建,打开 .bashrc 文件也可以),例如把 “~/lua/” 路径加入 LUA_PATH 环境变量里:

#LUA_PATH
export LUA_PATH="~/lua/?.lua;;"

文件路径以 “;” 号分隔,最后的 2 个 “;;” 表示新加的路径后面加上原来的默认路径。
接着,更新环境变量参数,使之立即生效。

source ~/.profile
面向对象
-- 元类
Shape = {area = 0}

-- 基础类方法 new
function Shape:new (o,side)
  o = o or {}
  setmetatable(o, self)
  self.__index = self
  side = side or 0
  self.area = side*side;
  return o
end

-- 基础类方法 printArea
function Shape:printArea ()
  print("面积为 ",self.area)
end

-- 创建对象
myshape = Shape:new(nil,10)

myshape:printArea()

调用其他语言库

LuaJIT 在传统的 Lua C API 之外,额外提供 FFI 的方式来调用 C 函数,更是大大提升了跟 C 交互的便利度。
FFI 全称是 Foreign Function Interface

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值