我的Swig接口文件中包含以下内容:.c / .h,用于小型GUI库:
%{
void Widget_name_set( Widget *widget, char *name )
{
if( !name ) return;
WidgetSetName( widget, name );
}
char *Widget_name_get( Widget *widget )
{
return WidgetGetName( widget );
}
%}
struct Widget
{
%extend
{
char name[ 32 ];
Widget( void )
{
return WidgetNew();
}
~Widget()
{
if( $self ) WidgetDelete( $self );
}
void SetName( char *name )
{
Widget_name_set( $self, name );
}
char *GetName()
{
return Widget_name_get( $self );
}
}
};
然后我使用接口文件生成Lua包装器。如果我在Lua中调用以下内容,结果几乎与预期一致:
w = Widget();
w:SetName("test");
一切都好。但如果我这样做:
w = Widget();
w.SetName( nil, "test" );
当参数为零时,它显然会崩溃。有没有办法(使用Swig接口或在Lua中)用点来抑制所有调用,只保留带列的调用?像这样对用户来说会更容易,并且会避免我添加1000万个指针检查等等......
答案 0 :(得分:0)
有没有办法(使用Swig界面或Lua)来抑制所有带点的调用,只保留带列的调用?
没有。就Lua而言,这只是语义上的糖。使用.
表示只访问该成员。使用:
表示在调用函数时,第一个参数是使用:
访问的表。
你可能甚至无法区分检查Lua反汇编(尽管不可否认,这只是我的猜测);到那时,它可能已被转换为最终形式。