lua 重新載入模組
重新載入模組
[c-sharp] view
plaincopyprint?
- function reload( moduleName )
- package.loaded[moduleName] = nil
- require(moduleName)
- end
使用以上程式碼即可重新載入一個檔案。
這樣修改完lua程式碼後,可以不用重啟程式立刻生效。
原始碼
模組A:
[c-sharp] view plaincopyprint?- A = {}
- function A.test1()
- print(1)
-
A.test2()
- end
- functin A.test2()
- print(2)
- end
模組Main:
[c-sharp] view plaincopyprint?- Main=
- {
- callBack = nil,
- }
- function Main.setCallBack()
- Main.callBack = A.test1
- end
- function Main.call()
- Main.callBack()
- end
- Main.setCallBack()
呼叫Main.call()輸出:
1
2
修改程式碼後
如果修改A為:
模組A:
[c-sharp] view plaincopyprint?- A = {}
- function A.test1()
- print(1)
- print(3)
- A.test2()
- end
- functin A.test2()
- print(2)
- print(4)
- end
然後通過RPC或其他方法呼叫reload("A"),然後再呼叫Main.call()輸出:
1
2
4
可以看到3沒有輸出。
也就是說 Main.callBack = A.test1 記錄的是老的A.test1,重新載入後呼叫的還是老的A.test1。所以沒有輸出3。
但是老的A.test1呼叫的A.test2,是直接呼叫而不是記錄的函式變數,動態得在全域性查詢函式名時查到的是新的A.test2了。所以輸出了4。
在重新載入一個模組後,要注意其他地方有沒有儲存本模組的函式變數。
一般來說有RPC call函式名到函式的對映,還有timer等,這些callback都是記錄函式變數的。
RPC呼叫
下面一個遠端客戶端輸入指令碼,傳到服務端由服務端的lua虛擬機器執行的程式碼,主要是利用loadstring函式。
str引數就是輸入的指令碼,acc為當前session的唯一標誌,這裡是賬號名。
可以預先準備一些當前session固定的常用的變數,比如這裡c對應的就是玩家。客戶端在寫指令碼的時候可以直接使用這些變數。
在改變了某個模組A的程式碼後,可以結合上面的reload(),在客戶端輸入 reload("a"),rpc呼叫服務端的Debug.exec,更改的lua程式碼可以即時生效。
[c-sharp] view plaincopyprint?- function Debug.exec(str, acc)
- if not isDebug() then
- returnfalse
- end
- local c = CharactorManager.getObjByAccName( acc )
- if c == nil then return end
- str = "local c = CharactorManager.getObjByAccName(/"" .. acc .."/")" .. str
- print1(str)
- local func = loadstring( str )
- if func then
- func(c)
- print1("Suc")
- else
- print1("Fail")
- end
- end
相關推薦
lua 重新載入模組
重新載入模組 [c-sharp] view plaincopyprint? function reload( moduleName ) package.loaded[moduleName] = nil require(moduleNa
Python 3.X重新載入模組
為防止兩個模組互相匯入的問題,Python預設所有的模組都只匯入一次,如果需要重新匯入模組, Python2.7可以直接用reload(),Python3.X可以用下面幾種方法: 方法一:基本方法
Python重新載入模組方法
importlib 模組的作用模組,是一個一個單獨的py檔案 包,裡面包含多個模組(py檔案)動態匯入模組,這樣就不用寫那麼多的import程式碼, 典型的例子: 自動同步服務,每個網站都有一個py檔案。主程序裡收到同步任務,根據名稱來動態匯入對應的py檔案,這樣就不用寫那麼
lua 重新載入module
require 時候會檢查filename是否已經載入過,如果載入過那麼就記錄在 package.loaded表中,package.loaded[filename]=true 不會繼續讀檔案。此時如果想重新載入檔案,那麼將package.loaded[filename]=n
Python 重新載入模組
簡述 在進行模組化程式設計時,經常會遇到這樣一種場景: 編寫了一個 Python 模組,並用 import my_module 的形式進行匯入。當對該模組進行更改後,即使重新匯入,其中的任何改變都不會被識別,這使得模組除錯變得非常困難。 那麼,該如
Lua重新載入Lua檔案
function CFModuleReload( moduleName) if UtilityHelper:getInnerTest() == 1 then CCFileUt
lua檔案的載入和解除安裝~package.loaded和require配合讓一個檔案更新後重新載入
用require函式只能載入一次,因為它的特性是: 1、require函式會搜尋目錄載入檔案 2、require會判斷是否檔案已經載入避免重複載入同一檔案 而這個特性二,雖然我們可能知道這兩個特性,但是潛意識裡面常常把這個特性二給忽視掉了. 直到哪天我們需要反覆載入同
叢集環境下module載入模組與作業提交
叢集上已安裝了軟體,卻無法呼叫,許可權不足的情況下,往往管理賬戶會開放一個埠,讓我能夠只用module命令來載入相關軟體。 module使用 管理賬戶modules的安裝 sudo yum install -y environment-modules mo
0day 第11章--11.6節:利用載入模組之外的地址繞過SafeSEH
實驗環境:winxp sp3 vs2010 總結一下入的坑: (1) 變數zero的位置必須在strcpy()的後面,不然strcpy之後會將zero的值覆蓋掉,導致zero不為0,觸發不了異常。 void test(char * input) { char str[200];
Spyder 自動補全 載入模組
1.刪除環境中的enum包,pip uninstall enum 或 pip uninstall enum34 2.找到 module_completion.py 檔案,位於目錄usr/lib/dist-packages/spyderlib/u
ionic-infinite在隱藏後,重新整理頁面重新載入資料,無法下拉載入的問題
問題描述: /** * doInfinite上拉載入 */ doInfinite(infinite) { this.index++; this.infinite=infinite
核心載入模組時出現Unknown symbol等提示
一.背景 1.更改了核心的配置,重新編譯了核心 2.未重新編譯核心模組 3.板子上只更新了核心,並未更新檔案系統 二.分析 發現是在讀取/etc/module.d/中的內容時出現Unknown symbol等資訊,恰逢當時只更新了核心未更新根檔案系統,因此懷疑與根檔案系統有關. &
Python 動態載入模組
lib資料夾下有test.py檔案: test.py檔案內容如下: class simple(object): def __init__(self): self.name='剛田武' 在‘動態載入模組.py’檔案下動態載入test.py模組的方法如下:
微信中蘋果h5頁面用window.history.go(-1)返回上一頁頁面不會重新載入/重新整理
微信中h5頁面用window.history.go(-1)返回上一頁頁面不會重新載入問題 問題描述: 在實際開發中遇到這樣一個問題,業務需求涉及到返回上一頁問題,第一時間想到了window.history.go(-1)方法,這樣做本身沒有任何問題,但是在微信中,安卓手機還好返回上一頁
Nginx下修改php.ini後重新載入配置檔案命令 Nginx下修改php.ini後重新載入配置檔案命令
Nginx下修改php.ini後重新載入配置檔案命令 修改php.ini後 如,我的 php.ini 檔案是放在 /etc/php.ini php 所在目錄是 /www/Linux/php-5.2.17 修改 php.ini 後要用 php-f
android螢幕旋轉禁止activity重新載入
android螢幕旋轉時預設會重新載入頁面,使用者體驗較差。 如果要禁止重新載入可以用如下方法: AndroidManifest.xml中對應的activity下增加一項 android:configChanges="orientation|screenSize" <act
.net載入失敗的程式集重新載入
在.net程式中,程式集是Lazy載入的,只有在用的時候才會去載入,當程式集載入失敗時,會觸發AppDomain.AssemblyResolve的事件,在這個事件中,我們甚至還可以進行補救,從別得地方重新載入程式集。 AppDomain.CurrentDomain.AssemblyResolve
如何在不重啟 JVM 的情況下重新載入證書檔案?
某種情況下需要動態下載證書檔案後使用 SSL 訪問某服務,但由於 JVM 使用預設的證書訪問新服務,該證書在 JVM 啟動的時候載入,那時還沒有新服務的證書,所以會報 ValidatorException,詳情: 16:44:27,338 ERROR [Htt
Angular ui-roter 和AngularJS 通過 ocLazyLoad 實現動態(懶)載入模組和依賴
什麼是ui-router ui-router是AngularUI庫最有用的元件之一(AngularUI庫由AngularJS社群構建)。它是一個第三方路由框架,允許通過狀態機制組織介面,而不是簡單的URL路由。 什麼是ocLoayLoad ocLoayLoad是AngularJS
eclipse 重新載入專案遇到的問題----The entity has no primary key attribute defined
原文地址::https://blog.csdn.net/baidu_26550817/article/details/51752085 相關文章 1、JPA Error : The entity has no primary key attribute defined----https://