lua基礎語法篇一

来源:https://www.cnblogs.com/bushrose/archive/2023/05/01/17366598.html
-Advertisement-
Play Games

列印 print("hello world") 註釋 單行註釋 多行註釋 -- 這是單行註釋 --[[ 這是多行註釋 ]] 賦值 s="Hello World" -- 多重賦值 a,b="String a","String b" -- 交換值,類似python a,b="String a","Str ...


列印

print("hello world")

註釋

  • 單行註釋
  • 多行註釋
-- 這是單行註釋

--[[
這是多行註釋
]]

賦值

s="Hello World"

-- 多重賦值
a,b="String a","String b"

-- 交換值,類似python
a,b="String a","String b"
a,b=b,a

數據類型

Lua有8種基本類型,如下表

類型 說明
nil 空值,只包含一個nil
boolean 布爾類型
number 數值類型
string 字元串,用單引號或雙引號表示
table Lua中的表,其實是一個關聯數組,數組的索引可以是數字、字元串或表類型
function 函數,由C或Lua編寫的函數
userdata 表示存儲在變數中的c數據結構
thread 線程類型,表示執行的獨立線路,用於執行協同程式
print(type("Hello world"))      --> string
print(type(10.4*3))             --> number
print(type(print))              --> function
print(type(type))               --> function
print(type(true))               --> boolean
print(type(nil))                --> nil
print(type({}))                 --> table
print(type(io.stdin))           --> userdata

nil(空)

nil表示一種沒有任何有效值

print(type(a))

給全局變數和table中某一變數賦值為nil,等同於刪除掉。

boolean(布爾)

  • boolean類型只有兩個可選值,true(真)和false(假)。
  • 在Lua中,falsenil是假,其他的都為真。

number(數字)

Lua預設只有一種number類型,類似C語言中的double(雙精度)

string(字元串)

字元串由一對雙引號或單引號表示。

-- 字元串有以下四種表示方式
s='string'
s="String"
s=[[String]]
s=[==[String]==]

字元串連接採用..操作符

print("a".."b")
-- ab

使用#放在字元串前面來計算其長度,如下:

s="Hello world"
print(#s)
--11

table(表)


-- 創建一個空的表
local tb={}

-- 初始化表
local tb1={"a","b","c"}

  • 不同於其他語言,Lua的索引從1開始
  • table不會固定大小,新增數據table長度自動增加,沒初始化的table都是nil

function(函數)

在 Lua 中,函數是被看作是"第一類值(First-Class Value)",函數可以存在變數里:

function factorial1(n)
    if n == 0 then
        return 1
    else
        return n * factorial1(n - 1)
    end
end
print(factorial1(5))
factorial2 = factorial1
print(factorial2(5))

function 可以以匿名函數(anonymous function)的方式通過參數傳遞:

function anonymous(tab, fun)
    for k, v in pairs(tab) do
        print(fun(k, v))
    end
end
tab = { key1 = "val1", key2 = "val2" }
anonymous(tab, function(key, val)
    return key .. " = " .. val
end)

thread(線程)

在 Lua 里,最主要的線程是協同程式(coroutine)。它跟線程(thread)差不多,
擁有自己獨立的棧、局部變數和指令指針,可以跟其他協同程式共用全局變數和其他大部分東西。
線程跟協程的區別:線程可以同時多個運行,而協程任意時刻只能運行一個,
並且處於運行狀態的協程只有被掛起(suspend)時才會暫停。

userdata(自定義類型)

userdata 是一種用戶自定義數據,用於表示一種由應用程式或 C/C++ 語言庫所創建的類型,
可以將任意 C/C++ 的任意數據類型的數據(通常是 struct 和 指針)存儲到 Lua 變數中調用。

變數

Lua 變數有三種類型:

  • 全局變數預設情況下,Lua中所有的變數都是全局變數
  • 局部變數使用local顯式聲明在函數內的變數,以及函數的參數,都是局部變數。在函數外即使用local去聲明,它的作用域也是當前的整個文件,這相當於一個全局變數。
  • 表中的域

註意,變數的預設值均為nil。Lua語言不區分未初始化變數和被賦值為nil的變數,因此全局變數無須聲明即可使用。「在Lua中,應儘可能使用局部變數」,這有兩個好處:

  1. 避免命名衝突
  2. 訪問局部變數的速度比全局變數更快
a = 5               -- 全局變數
local b = 5         -- 局部變數

function joke()
    c = 5           -- 全局變數
    local d = 6     -- 局部變數
end

a, b, c = 0, 2, 7   -- Lua支持多變數賦值

本文由【產品經理不是經理】gzh同步發佈,歡迎關註


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這一篇簡單說明 CH32V208 的片記憶體儲結構和時鐘的特點, 以及通過 SDK 中的示例代碼分析 CH32V208 的時鐘設置 ...
  • CH32V208系列是沁恆32位RISC-V中比較新的一個系列, 基於青稞RISC-V4C內核, 最高144MHz主頻, 64KB SRAM,128KB Flash, 供電電壓2.5/3.3V. 這個型號的特點: 除了特有的硬體堆棧區、快速中斷入口, 片上集成了2Mbps低功耗藍牙BLE 5.3, ... ...
  • (初探MySQL) 前言 周所周知MySQL已成為全世界最受歡迎的資料庫之一。無論你用的何種編程語言在開發系統,資料庫基本上都是必不可少的。 無論是小型項目開發如我們開發一個個人博客系統,還是構建那些聲名顯赫的網站如某寶、某訊等,MySQL都有著穩定、可靠、快速等優點。可以勝任數據存儲的業務需求。 ...
  • 1. 消滅NULL 1.1. NULL惹人討厭的原因 1.1.1. 進行SQL編碼時,必須考慮違反人類直覺的三值邏輯 1.1.2. 指定IS NULL、IS NOT NULL的時候,不會用到索引,SQL語句執行起來性能低下 1.1.2.1. 1 + NULL = NULL 2- NULL = NUL ...
  • 前言 地址:https://www.cnblogs.com/FReQuenter5156/p/setblog.html/ 如題,使用的是 Simple Memory 主題。 Github 連接:https://github.com/BNDong/Cnblogs-Theme-SimpleMemory。 ...
  • 嘿嘿嘿、嘿嘿,俺又回來了! github代碼地址 https://github.com/Tom-shushu/work-study 介面文檔有道雲 https://note.youdao.com/s/GShGsYE8 介面文檔離線版本 https://files.cnblogs.com/files/ ...
  • FactoryBean 和 BeanFactory 是兩個不同的概念。前者是一個介面,我們可以在實現該介面時通過調用 getObject 方法來返回實例,同時 FactoryBean 本身也是一個實例。後者是 Spring 容器的工廠,通過其中的 bean 定義 Map 一個一個地實例化我們通過註解... ...
  • Springboot的優點 內置servlet容器,不需要在伺服器部署 tomcat。只需要將項目打成 jar 包,使用 java -jar xxx.jar一鍵式啟動項目 SpringBoot提供了starter,把常用庫聚合在一起,簡化複雜的環境配置,快速搭建spring應用環境 可以快速創建獨立 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...