Lua SWIG错误%immutable行为

Lua SWIG错误%immutable行为,lua,swig,Lua,Swig,我将swig与Lua一起使用,并将以下结构包装起来,用于一般向量计算: typedef struct { %mutable; float x,y,z %extend { Set(float x,float y, floatz ) { Vector3Set(x,y,z); } }; } Vector3; 在下面

我将swig与Lua一起使用,并将以下结构包装起来,用于一般向量计算:

typedef struct 
{ 
    %mutable; 
        float x,y,z 

    %extend 
    { 
            Set(float x,float y, floatz ) 
            { 
                    Vector3Set(x,y,z); 
            } 
    }; 

} Vector3; 
在下面的结构中,我将在另一个结构中重新使用Vector3,并将其设置为%immutable:

world.gravity=Vector3:Set(1,2,3) 
在Lua中,以下操作按预期运行,并得到重力不可变的错误:

world.gravity=Vector3:Set(1,2,3) 
但如果我这样做:

world.gravity.x=-10 
不产生任何误差,且world.gravity.x等于-10


如何解决这个问题,我显然不想将Vector3中的XYZ设置为%不可变

从Vector3中删除%可变,以便Swig可以将可变标志传播到内部数据成员。

如果从Vector3中删除%可变,会怎么样?我认为这是预期的行为,因为重力成为对可变对象的引用。也就是说,引用是不可变的,但它所引用的东西不是。我稍后会设法寻找解决办法。@scholli:你说对了!这就成功了。。。一堆。。。真不敢相信事情会这么简单;很高兴听到这个消息,我已经回答了,所以你可以关闭。等等。。。不,那没用。。。它只是将问题推迟到接口文件中的下一个结构,在我的例子中是Vector4。。。我仍然被同样的问题困扰着。。。犯错误