我正在使用Lua/C綁定,並且存儲在輕量用戶數據的lua表中的對象存在問題。在下面的例子中,我從C調用'myfunction',其中一些數據用於通過我的函數「net.connection(v)」分配一個新對象(使用C語言),它使用 lua_newuserdata()返回對象結果。我嘗試將這個值用作表'mytable'中的一個鍵。當我調用'myfunction'時,創建我的新對象並將其存儲在我的表中,因爲我存儲到表中的值是'print'給我的值。Light userdata as table keys
mytable = {}
function action(obj)
print(mytable[obj])
end
function myfunction(data)
for k,v in pairs(data) do
theObj = net.connection(v)
mytable[theObj] = "test string"
print(mytable[theObj]) --Prints 'test string'
end
end
然而,在稍後的時間點,我想用同一個對象的指針(函數「動作」以上)查找此數據,但總是爲零。 (theObj和obj)的指針地址是相同的,當我打印出表格的內容(鍵,值)時,表格中同時包含一個指向我的用戶數據的指針和正確的值,但是當我使用參數(obj),我無法從表中檢索值。在函數'action'的情況下,我使用push_lightuserdata將用戶數據推送到堆棧上。
以這種方式使用push_lightuserdata可能會導致此問題有什麼細微之處嗎?
Accoring到this鏈路,利用光用戶數據作爲表密鑰是細...
發現它只是爲了澄清,當你做這樣的事'爲K, v成對(mytable)做print(k,v)end',你可以看到你想要的鍵值對,但是當你用看起來合適的鍵調用'action'時,你會得到零?或者你是否試圖從未在此發佈的C代碼中獲取'mytable'中的值? – Alex 2011-12-30 19:26:02
你是對的。在'action'中迭代表格時,我可以看到我想要的鍵值對,但是當我嘗試使用參數作爲鍵獲取值時,它給了我一個零結果。 – jimt 2011-12-30 19:29:45
您是否嘗試過直接在'action'內使用'print(obj)'檢查密鑰以確保它獲得您期望的值?如果表中沒有很多其他鍵值對,我可以嘗試添加如下內容:'對於k,v成對(mytable)如果k == obj則執行print(k,v,「找到它! )else print(k,v)end'。使用輕量級用戶數據作爲密鑰應該沒問題,所以在這裏必須有一個愚蠢的錯誤。 : -/ – Alex 2011-12-30 19:39:33