Appearance
学习Lua
注释
lua
-- 注释
print("Hi") -- 注释
--[[
多行
注释
]]
变量
lua
-- 不同类型
local x = 10 -- number
local name = "sid" -- string
local isAlive = true -- boolean
local a = nil --no value or invalid value
-- increment in numbers
local n = 1
n = n + 1
print(n) -- 2
-- strings
-- 拼接字符串
local phrase = "I am"
local name = "Sid"
print(phrase .. " " .. name) -- I am Sid
print("I am " .. "Sid")
比较操作
lua
== 等于
< 小于
> 大于
<= 小于等于
>= 大于等于
~= 不等于
条件语句
lua
-- 数字比较
local age = 10
if age > 18 then
print("over 18") -- 这里不会执行
end
-- elseif and else
age = 20
if age > 18 then
print("over 18")
elseif age == 18 then
print("18 huh")
else
print("kiddo")
end
-- 布尔型比较
local isAlive = true
if isAlive then
print("Be grateful!")
end
-- 字符串比较
local name = "sid"
if name ~= "sid" then
print("not sid")
end
组合语句
lua
local age = 22
if age == 10 and x > 0 then -- 都需要为true才会执行
print("kiddo!")
elseif x == 18 or x > 18 then -- 其中一个为true会执行
print("over 18")
end
-- result: over 18
取反
你也可以使用 not 关键字取反:
lua
local isAlive = true
if not isAlive then
print(" ye ded!")
end
函数
lua
local function print_num(a)
print(a)
end
or
local print_num = function(a)
print(a)
end
print_num(5) -- prints 5
-- 多个参数
function sum(a, b)
return a + b
end
作用域
变量有不同的作用域,一旦出了作用域,该范围内的值将无法再被访问。
lua
function foo()
local n = 10
end
print(n) -- nil , n isn't accessible outside foo()
循环
不同的循环方法:
While
lua
local i = 1
while i <= 3 do
print("hi")
i = i + 1
end
For
lua
for i = 1, 3 do
print("hi")
end
-- Both print "hi" 3 times
Tables
- Tables 可以用于存储复杂数据.
- tables的类型: 数组 (lists) 和 字典 (key,value)
数组
- 数组中的元素可以通过索引来访问。
lua
local colors = { "red", "green", "blue" }
print(colors[1]) -- red
-- 循环lists的不同方法
-- #colors 是table的长度, 使用了#tablename语法
for i = 1, #colors do
print(colors[i])
end
-- ipairs
for index, value in ipairs(colors) do
print(colors[index])
-- or
print(value)
end
-- 在这里如果你不使用索引或值,可以将其替换为_
for _, value in ipairs(colors) do
print(value)
end
字典
- 字典是包含了一堆key和value的类型:
lua
local info = {
name = "sid",
age = 20,
isAlive = true
}
-- both print sid
print(info["name"])
print(info.name)
-- Loop by pairs
for key, value in pairs(info) do
print(key .. " " .. tostring(value))
end
-- prints name sid, age 20 etc
嵌套Tables
lua
-- Nested lists
local data = {
{ "sid", 20 },
{ "tim", 90 },
}
for i = 1, #data do
print(data[i][1] .. " is " .. data[i][2] .. " years old")
end
-- Nested dictionaries
local data = {
sid = { age = 20 },
tim = { age = 90 },
}
模块
从别的文件引入代码。
lua
require("path")
-- 例如在 ~/.config/nvim/lua 中, 所有的目录和文件都可以通过require来访问
-- Do know that all files in that lua folder are in path!
-- ~/.config/nvim/lua/custom
-- ~/.config/nvim/lua/custom/init.lua
require "custom"
-- both do the same thing