gpt4 book ai didi

用于面向对象访问的 C & lua 元表

转载 作者:太空宇宙 更新时间:2023-11-04 00:55:00 27 4
gpt4 key购买 nike

我有这样的东西:(它实际上是 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 对象公开为用户数据并将 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 来完成。但是,进行此更改会破坏向后兼容性。

有什么简单的方法可以同时拥有这两种语法吗?

最佳答案

只要您保留getset 函数,这两种方法都可以。

如果你的对象是一个普通的 Lua 表,__index__newindex 将只为不存在的键调用。

如果您的对象(如您在更新中所述)是用户数据,您可以自己模拟此行为。在 __index 中,如果键是 "get""set",则返回一个合适的函数。

关于用于面向对象访问的 C & lua 元表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5799893/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com