static_set

此函数用于更改结构的 静态结构 。您需要提供要修改的结构,以及要应用于第一个结构的新静态结构,您可以使用 static_get 从其他结构或函数中获取该结构。

这将使用 is_instanceof 覆盖结构的静态链,该静态链用于确定结构属于哪个构造函数。

警告 除了反序列化用例之外,不建议使用此函数,因为在这些用例中,您需要加载结构并对其应用构造函数。参见:更改静态结构

 

语法:

static_set(struct, static_struct);

参数类型描述
structStruct要为其设置静态结构的结构
static_structStruct要用于结构的新静态结构

 

返回:

N/A

 

示例1:基本使用

var _potion = json_parse(_json_string);

show_debug_message(is_instanceof(_potion, potion)); // false (0)

var _static_potion = static_get(potion);
static_set(_potion, _static_potion);

show_debug_message(is_instanceof(_potion, potion)); // true (1)

在上面的代码中,在加载 potion 结构时,它只被创建为一个简单的结构,不属于构造函数,也没有任何静态变量。

在将 potion 的静态结构应用于它之后,它将成为 potion 的实例 (如用 is_instanceof() 测试的那样),并且还获得包含在 potion 构造函数中的任何静态变量和静态方法。

 

示例 2:将静态结构分配给纯数据结构

function vec2(_x, _y) constructor
{
    x = _x;
    y = _y;
    
    static add = function(_vecb)
    {
        x += _vecb.x;
        y += _vecb.y;
    }
    
    // ...
}

var _a = new vec2(10, 10);
var _b = {x: 4, y: 9};

static_set(_b, static_get(vec2));

_b.add(_a);

show_debug_message(_b);

上面的代码首先定义了一个构造函数来创建 vec2 结构。 构造函数将参数 _x_y 分别分配给结构体的 xy 变量。 它还定义了一个静态 add 函数(可能还有许多其他函数,由 // ... 注释指示),所有将此构造函数的静态结构作为其静态结构的结构都可以使用该函数。

然后定义两个结构变量:_a 使用 vec2 构造函数创建,并获取 (10, 10) 的 (x, y),_b 创建为基本结构 只需两个变量:x 设置为 4,y 设置为 9。

然后使用 static_set 为结构体变量 _b 分配 vec2 的静态结构体,这会将 _b 转换为 vec2 结构体,从而使静态结构体 vec2 的变量和函数可供 _b 使用。 之后,通过调用 _b 上的 add 函数将 _a 添加到 _b。 然后使用 show_debug_message 显示 _b。 此调试输出将显示 { x : 14, y : 19 }