1
我有這樣的事情: (它實際上是C++,但在這個簡單的形式沒有什麼特定的C++),則它C&LUA元表的面向對象訪問
struct Blob;
// Some key-value accessors on Blob
char * blob_get_value(Blob * b, char * key);
void set_value(Blob * b, char * key, char * value);
//Some lua wrappers for these functions
int blob_get_value_lua(lua_State * L);
int blob_set_value_lua(lua_State * L);
我做這些訪問在語法上乾淨的方式。目前我揭露Blob對象爲用戶數據和插件get和set可到元表,用這個我能做到:
blob = Blob.new()
blob:set("greeting","hello")
print(blob:get("greeting"))
但我寧願
blob = Blob.new()
blob.greeting = hello
print(blob.greeting)
我知道這可以這樣做將__index
設置爲blob_get_value_lua
和__newindex
至blob_set_value_lua
。但是,進行此更改將會破壞向後兼容性。
有什麼簡單的方法可以同時使用兩種語法嗎?
感謝,但對我來說Blob.new()創建一個新的用戶數據對象,而不是表,獲取和設置在用戶數據的元表會。我會更新這個問題以明確這一點。 – 2011-04-27 06:58:54
我已經更新了我的答案以涵蓋該內容。 – 2011-04-27 07:39:51