XLua官方教程 02 C 訪問Lua

2021-10-10 00:22:52 字數 1956 閱讀 3477

這裡指的是c#主動發起對lua資料結構的訪問。

本章涉及到的例子都可以在xlua\tutorial\csharpcalllua下找到。

一、獲取乙個全域性基本資料型別

訪問luaenv.global就可以了,上面有個模版get方法,可指定返回的型別。

luaenv.global.get<

int>(

"a")

luaenv.global.get<

string

>(

"b")

luaenv.global.get<

bool

>(

"c")

二、訪問乙個全域性的table

也是用上面的get方法,那型別要指定成啥呢?

1、對映到普通class或struct

定義乙個class,有對應於table的字段的public屬性,而且有無引數建構函式即可,比如對於可以定義乙個包含public int f1;public int f2;的class。

這種方式下xlua會幫你new乙個例項,並把對應的字段賦值過去。

table的屬性可以多於或者少於class的屬性。可以巢狀其它複雜型別。

要注意的是,這個過程是值拷貝,如果class比較複雜代價會比較大。而且修改class的字段值不會同步到table,反過來也不會。

這個功能可以通過把型別加到gcoptimize生成降低開銷,詳細可參見配置介紹文件。

那有沒有引用方式的對映呢?有,下面這個就是:

2、對映到乙個inte***ce

這種方式依賴於生成**(如果沒生成**會拋invalidcastexception異常),**生成器會生成這個inte***ce的例項,如果get乙個屬性,生成**會get對應的table欄位,如果set屬性也會設定對應的字段。甚至可以通過inte***ce的方法訪問lua的函式。

3、更輕量級的by value方式:對映到dictionary<>,list<>

不想定義class或者inte***ce的話,可以考慮用這個,前提table下key和value的型別都是一致的。

4、另外一種by ref方式:對映到luatable類

這種方式好處是不需要生成**,但也有一些問題,比如慢,比方式2要慢乙個數量級,比如沒有型別檢查。

三、訪問乙個全域性的function

仍然是用get方法,不同的是型別對映。

1、對映到delegate

這種是建議的方式,效能好很多,而且型別安全。缺點是要生成**(如果沒生成**會拋invalidcastexception異常)。

delegate要怎樣宣告呢?

對於function的每個引數就宣告乙個輸入型別的引數。

多返回值要怎麼處理?從左往右對映到c#的輸出引數,輸出引數包括返回值,out引數,ref引數。

引數、返回值型別支援哪些呢?都支援,各種複雜型別,out,ref修飾的,甚至可以返回另外乙個delegate。

delegate的使用就更簡單了,直接像個函式那樣用就可以了。

2、對映到luafunction

這種方式的優缺點剛好和第一種相反。

使用也簡單,luafunction上有個變參的call函式,可以傳任意型別,任意個數的引數,返回值是object的陣列,對應於lua的多返回值。

四、使用建議

1、訪問lua全域性資料,特別是table以及function,代價比較大,建議盡量少做,比如在初始化時把要呼叫的lua function獲取一次(對映到delegate)後,儲存下來,後續直接呼叫該delegate即可。table也類似。

2、如果lua測的實現的部分都以delegate和inte***ce的方式提供,使用方可以完全和xlua解耦:由乙個專門的模組負責xlua的初始化以及delegate、inte***ce的對映,然後把這些delegate和inte***ce設定到要用到它們的地方。

C 教程02 C 環境

c 環境 在這一章中,我們將討論建立 c 程式設計所需的工具。我們已經提到 c 是 net 框架的一部分,且用於編寫 net 應用程式。因此,在討論執行 c 程式的可用工具之前,讓我們先了解一下 c 與 net 框架之間的關係。net 框架 net framework net 框架是乙個創新的平台,...

02 C 基礎 引用( )

引用並非物件,相反的,它只是為了乙個已經存在的物件所起的另乙個名字 include using namespace std 左值引用 int main 執行結果 val 1024,val 0x28ff44,refval 0x28ff44,refval 10241.1 引用報錯 初始值要滿足為物件 i...

02C 垃圾炸彈

總時間限制 1000ms 記憶體限制 65536kb 描述2018年俄羅斯世界盃 2018 fifa world cup 開踢啦!為了方便球迷 比賽,莫斯科街道上很多路口都放置了的直播大螢幕,但是人群散去後總會在這些路口留下一堆垃圾。為此俄羅斯 決定動用一種最新發明 垃圾炸彈 這種 炸彈 利用最先進...