Redis基礎知識(學習筆記21--Lua 腳本語言2)

来源:https://www.cnblogs.com/xuliuzai/p/18401027
-Advertisement-
Play Games

本系列文章是 DolphinScheduler 由淺入深的教程,涵蓋搭建、二開迭代、核心原理解讀、運維和管理等一系列內容。適用於想對 DolphinScheduler瞭解或想要加深理解的讀者。 推薦閱讀: 海豚調度監控:使用圖關係解決核心鏈路告警問題,減輕任務運維負擔,用戶五星好評! 海豚調度 ...


4.2 迭代器

Lua提供了兩個迭代器pairs(table) 與 ipairs(table)。這兩個迭代器通常會應用於泛型for迴圈中,用於遍歷指定的table。這兩個迭代器的不同是:

  • ipairs(table):僅會迭代指定table中的數組元素。
  • pairs(table) :會迭代整個table元素,無論是數組元素,還是key-value。

4.3 模塊

模塊是Lua中特有的一種數據結構。從 Lua 5.1 開始,Lua加入了標準的模塊管理機制,可以把一些公用的代碼放在一個文件里,以 API 介面的形式在其他地方調用,有利於代碼的重用和降低代碼耦合度。

模塊主要由 table 組成。在 table 中 添加相應的變數、函數,最後文件返回該 table 即可。如果其它文件中需要使用該模塊,只需通過 require 將該模塊導入即可。

4.4 元表與元方法

元表,即 Lua 中普通 table 的元數據表,而元方法則是元表中定義的普通表的預設行為。 Lua 中的每個普通 table 都為其定義一個元表,用於擴展該普通 table 的行為功能。例如,對於 table 與數值相加的行為, Lua 中是沒有定義的,但用戶可通過 為其指定元表來擴展這種行為;再如,用戶訪問不存在的 table 元素, Lua 預設返回的是 nil,但用戶可能並不知道發生了什麼。此時可以通過為該 table 指定元素來擴展該行為:給用戶提示信息,並返回用戶指定的值。

(1)重要函數

元表中有兩個重要函數:

  • setmetatable(table,metatable)::將metatable指定為普通table的元表。
  • getmetatable(table):獲取指定普通表 table 的元表。
(2)__index 元方法

當用戶在對 table 進行讀取訪問時,如果訪問的數組索引或key 不存在,那麼系統就會自動調用元表的 __index 元方法。該重寫的方法可以是一個函數,也可以是另一個表。如果重寫的__index 元方法是函數,且有返回值,則直接返回;如果沒有返回值,則返回nul。

(3)__newindex元方法

當用戶為 table 中一個不存在的索引或key賦值時,就會自動調用元表的__newindex 元方法。該重寫的方法可以是一個函數,也可以是另一個表。如果重寫的__newindex元方法是函數,且有返回值,則直接返回;如果沒有,則返回nil。

(4)運算符元方法

如果要為一個表擴展加號(+)、減號(-)、等於(==)、小於(<)等運算功能,則可重寫相應的元方法。

例如,如果要為一個table擴展加號(+)運算功能,則可以重寫該table元表的__add元方法,而具體的運算規則,則是定義在該重寫的元方法中的。這樣,當一個table在進行加法(+)運算時,就會自動調用其元表的__add元方法。

類似於加法操作的其它操作,Lua中還有:

元方法 說明 元方法 說明
__add 加法,+ __band 按位與,&
__sub 減法,- __bor 按位或,|
__mul 乘法,* __bxor 按位異或,~
__div 除法,/ __bnot 按位非,~
__mod 取模,% __shl 按位左移,<<
__pow 次冪,^ __shr 按位右移,>>
__unm 取反,- __eq 等於,==
__idiv 取整除法,// __it 小於,<
__concat 字元串連接,... __lt 大於,>
__len 字元串長度,#    
 (5)__tostring 元方法

 直接輸出一個table,其輸出的內容為類型與table的存放地址。如果想讓其輸出table中的內容,可重寫__tostring元方法。

(6)__call元方法

 當將一個table以函數形式來使用時,系統會自動調用重寫的__call元方法。該用法主要時可以簡化對table的相關操作,將對table的操作與函數直接結合。

(7)元表單獨定義

為了便於管理和復用,可以將元素單獨定義為一個文件。該文件中僅可定義一個元表,且一般文件名與元表名稱相同。

若一個文件要使用其它文件中定義的元表,只需使用 require"元表文件名“ 即可將元表導入使用。

如果用戶想擴展該元表而又不想修改元表文件,則可在用戶自己文件中重寫其相應功能的元方法即可。

5.面向對象

Lua 中沒有類的概念,但通過table、function 與元表可以模擬和構造出具有類這樣功能的結構。

 (1)簡單對象的創建

Lua 中通過table 與 function可以創建出一個簡單Lua對象:table為Lua對象賦予屬性,通過function為Lua對象賦予行為,即方法。

(2)類的創建

Lua 中使用table 、function與元表可以定義出類:使用一個表作為基礎類,使用一個function作為該基礎類的new()方法。在該new()方法中創建出一個空表,再為該空表指定一個元表。該元表重寫__index元方法,且將基礎表指定為重寫的__index元方法。由於new()中的表是空表,所以用戶訪問的所有key都會從基礎類(表)中查找。

 6.協同線程與協同函數

(1)協同線程

Lua 中有一種特殊的線程,稱為coroutine,協同線程,簡稱協程。其可以再運行時暫停執行,然後轉去執行其它線程,然後還可以返回再繼續執行沒有執行完畢的內容。即可以”走走停停,停停再走走“。

協同線程也稱為協作多線程,在Lua中表示獨立的執行線程。任意時刻只會有一個協程執行,而不會出現多個協程同時執行的情況。

協同線程的類型為thread,其啟動、暫停、重啟等,都需要通過函數來控制。下表是用於控制協同線程的基本方法。

 方法 描述 
 create(function) 創建一個協同線程實例,即返回的是thread類型。參數是一個function。其需要通過resume()來啟動協同線程的執行。 
 resume(thread,...) 啟動指定的協同線程的執行,使其 從開始處或前面掛起處開始執行。可以向create()的內置函數傳遞相應的參數。如果內置函數具有返回值,resume()會全部接收並返回。
 running()  返回正在運行的協同線程實例,即thread類型值。
yield()   掛起協同線程,並將協同線程設置為掛起狀態。resume()可從掛起處重啟被掛起的協同線程。
status(thread)  查看協同線程的狀態。狀態有三種:運行態running,掛起態suspended,消亡態dead。 
colse()  關閉協同線程 
wrap(function)   創建一個協同線程,返回的是function類型。一旦調用該函數就會創建並執行一個協同線程實例。

 示例 1 ,無返回值

示例 2 ,有返回值

(2)協同函數

協同線程可以單獨創建執行,也可以通過協同函數的調用啟動執行。使用coroutine的wrap()函數創建的就是協同函數,其類型為function。

由於協同函數的本質就是函數,所以,協同函數的調用方式就是標準的函數調用方式。只不過,協同函數的調用會啟動其內置的協同線程。

示例如下:

也可以通過resume的方式開始掛起的協程。

 

學習筆記--參閱特別聲明

1.【Redis視頻從入門到高級】

【https://www.bilibili.com/video/BV1U24y1y7jF?p=11&vd_source=0e347fbc6c2b049143afaa5a15abfc1c】


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

-Advertisement-
Play Games
更多相關文章
  • Scoop 安裝 環境需求 PowerShell 5 + .NET Framework 4.5 + 安裝 指定安裝位置(配置環境變數) 以管理員身份打開PowerShell $env:SCOOP='D:\Applications\Scoop' [Environment]::SetEnvironmen ...
  • tcp mem 相關 net.ipv4.tcp_rmem = 4096 131072 6291456 讀取緩衝區,單位位元組 net.ipv4.tcp_wmem = 4096 16384 4194304 發送緩衝區,單位位元組 net.ipv4.tcp_mem = 760707 1014278 1521 ...
  • 導讀:數據同步方式的重要性對於數據集成領域的興從業者不言而喻,選擇正確的數據同步方式能讓數據同步工作的成果事半功倍。目市面上的數據同步工具很多,提供的數據同步方式也有多種,不同的數據同步方式有什麼區別?如何選擇適合自己業務需求的數據同步方式呢?本文將對此進行深入分析,並深入剖析WhaleTunnel ...
  • 《數據資產管理核心技術與應用》是清華大學出版社出版的一本圖書,全書共分10章,第1章主要讓讀者認識數據資產,瞭解數據資產相關的基礎概念,以及數據資產的發展情況。第2~8章主要介紹大數據時代數據資產管理所涉及的核心技術,內容包括元數據的採集與存儲、數據血緣、數據質量、數據監控與告警、數據服務、數據許可權 ...
  • 介紹: MyBatis-Plus 是基於 MyBatis 框架的一個增強工具,主要目的是簡化 MyBatis 的開發過程,提供更加簡潔、方便的 CRUD 操作。它是在保留 MyBatis 強大功能的基礎上,通過封裝和優化一些常見操作來提高開發效率。 MyBatis-Plus 提供了許多開箱即用的功能 ...
  • 時空人工智慧 時空人工智慧是AI領域的新型創新應用技術,定義為以時空為‘索引’對多源異構數據進行時空化治理和融合,並借力知識工程和AI演算法進行智能化分析,從而挖掘知識和輔助決策。時空AI是地理空間智能、城市空間智能和時空大數據智能等的統一表示,包括從時空感知、認知到決策預知的多項核心技術。其應用生態 ...
  • 在用鍵值對RDD進行操作時,經常會遇到不知道如何篩選出想要數據的情況,這裡提供了一些解決方法 目錄1、對固定的Key數據進行查詢2、對不固定的Key數據進行模糊查詢 1、對固定的Key數據進行查詢 代碼說明: SparkConf:配置 Spark 應用程式的一些基本信息。 SparkContext: ...
  • 寫在前面 今天學習hadoop部分的知識。 Hadoop 概述 Hadoop 是一個適合海量數據的分散式存儲和分散式計算的平臺。Hadoop 的處理思想是“分而治之”。它起源於 Google 的三篇文章:Google FS(GFS),MapReduce,BigTable。Hadoop 主要包含三個核 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...