У меня есть что-то вроде этого: (Это на самом деле C ++, но в этой упрощенной форме нет ничего специфичного для C ++)
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 как пользовательские данные, а плагин получает и устанавливает в metatable, используя это, я могу сделать:
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
.Однако внесение этого изменения нарушит обратную совместимость.
Есть ли простой способ иметь оба синтаксиса одновременно?