Skip to content
On this page

学习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

Powered by VitePress