跳到主要内容
版本:master

Program

program的概念

GS中的program和object的关系类似于C++的class和class派生的对象, 一个gs文件可以通过new_object生成很多对象,但是始终只有一个program

program的创建

int compile_program(string file_name, mixed file_content = nil, bool force_recompile = false, bool compile_for_patch = false)

通过compile_program方法可以动态编译一个program,将文件读取导content里然后执行编译,动态编译之后可以实现对该program派生的object进行更新,例如我们的内置方法monkey.patch(program)就是通过这个原理来更新所有object

program例子简单讲解

如何获取一个对象的program

program ent_program = program.find_by_name(object_name);   // 通过对象名获取program
program ent_program = object.get_program(); // 通过对象获取program

获取这个对象包含的组件

ent_program.get_components();   // 包含组件列表

获取这个对象包含的变量

ent_program.get_object_vars();   // 包含变量列表

获取这个对象包含的函数

ent_program.get_functions();   // 包含函数列表

判断一个对象是否拥有Item组件:

program ent_program = program.find_by_name("common/Node.gs");

if (!ent_program)
{
error("对应对象不存在!");
return false;
}

if (!ent_program.get_component(Item))
{
error("It has no Item component!");
return false;
}
else
return true;

program常用的外部函数

下面列出program类型一些常用的外部函数以及用法。

1. 通过对象获取program

函数原型:
program object.get_program()
使用方法:
program ent_program = object.get_program();

2. 通过对象名获取program

函数原型:
program find_by_name(string name)
使用方法:
program ent_program = program.find_by_name("common/User.gs");

3. 获取program管理的对象名称

函数原型:
string get_name()
使用方法:
string obname = program.get_name();

4. 获取该对象包含的指定组件

函数原型:
program get_component(string name)
使用方法:
program comp = program.get_component("common/Session.gs");

5. 获取该对象包含的所有组件

函数原型:
array get_components()
使用方法:
array comps = program.get_components();

6. 获取该对象包含的所有函数

函数原型:
array get_functions()
使用方法:
array funcs = program.get_functions();

7. 获取该对象包含的所有函数

函数原型:
array get_object_vars()
使用方法:
array vars = program.get_object_vars();

8. 获取该对象依赖的program列表

函数原型:
array get_depend_programs()
使用方法:
array programs = program.get_depend_programs();

9. 两个program是否有相同的变量数量,相同的名称,相同的基础类型和子类型

函数原型:
bool has_same_ob_vars(program p)
使用方法:
bool flag = p1.has_same_ob_vars(p2);

10. 获取所有依赖这个program作为组件的object列表

函数原型:
array get_depend_objects()
使用方法:
array obs = program.get_depend_objects();