2013-04-05 17 views
2

我從一個字符串(使用C api)加載函數的主體,但默認情況下,所有傳遞給函數的參數都可以使用...來訪問。什麼是指定參數列表的最佳方式?我只能想到像前面加上分析之前,下面的這個字符串的行(假設參數應該是自我,X,Y):在lua中指定函數參數名稱

local self, x, y = ... 

不過,我不知道,如果它的最好辦法做到這一點,或者是否有任何意想不到的副作用。

更新:在其中一個函數中,我需要一個形式爲self, type, ...的參數列表。以下是行不通的,對吧?

local self, type, ... = ... 

我應該用它來代替嗎?

text = "return function(self, type, ...)" + text + " end"; 
luaL_loadbufferx(L, text, text.length(), filename, "t"); 
lua_call(L, 0, 1); 
+0

你最後的解決方案是好的。請注意,你需要調用lua_call *兩次*來運行你的代碼。 – lhf 2013-04-05 21:39:30

+0

是的,在我張貼的片段之後,我從堆棧中抓取函數並將其存儲起來供以後使用。第一個解決方案沒有lua_call。 – riv 2013-04-05 22:53:07

回答

3

預先設定該行是創建命名參數的絕佳方法。如果您使用的是本地聲明,則不會有任何副作用(除了其他代碼的副作用外)。

+0

好,很好,但如果由於某種原因我的論點需要(自我,...) - 我不能這樣做,對吧? – riv 2013-04-05 21:07:24

+0

你可以通過使用這個函數來消除參數(self):'function Thing:functionName()'(該:()和self一樣) – bazola 2014-08-20 14:52:29