Files
playbook/skills/tsl-api-reference/references/codegen/builtin/object.md
T

3.8 KiB

Builtin - 对象

createObject(class_name, ...)

声明:function

创建一个已在 TSL 语言中注册的对象,类名或类类型无效时调用出错

参数 类型 说明
class_name string|classtype 已注册的对象类名,或通过 class()findClass() 获得的类类型
... any 可选。按顺序传给类构造函数的参数

返回:tslobject

示例

范例01:向构造函数传递参数

obj := createObject('CreationExample', 42);
echo obj.value, "\n";

type CreationExample = class
public
    value;
    function create(initial_value);
    begin
        value := initial_value;
    end;
end;
// 输出:42

findClass(class_name)

声明:function

按名称查找类,找不到时返回 0

参数 类型 说明
class_name string 类名称

返回:tclass|integer

示例

范例01:查找脚本中声明的类

class_value := findClass("DemoClass");
echo class_value <> 0;
// 输出:1

type DemoClass = class
end;

findClass(class_name, obj)

声明:function

将对象转换为指定类,类不匹配时返回 0

参数 类型 说明
class_name string 类名称
obj object 要转换的对象

返回:object|integer

示例

范例01:转换为指定类

obj := new DemoClass();
typed_obj := findClass("DemoClass", obj);
echo typed_obj <> 0;
// 输出:1

type DemoClass = class
end;

objectstate(obj_name)

声明:function

返回对象当前所处的生命周期状态

参数 类型 说明
obj_name object 要检查状态的对象

返回:integer

状态编码:1 表示构造中,2 表示构造完成,3 表示析构中,4 表示析构完成,0 表示未知状态,-1 表示参数不是对象

示例

obj := new StateProbe("ready");
echo objectstate(obj), "\n";

type StateProbe = class
public
    function create(value);
    begin
        echo objectstate(self), "\n";
    end;
end;
// 输出:1
// 输出:2

tslObjects(type)

声明:function

获取当前运行环境中 TSL 对象的引用信息,可选取回对象本身

参数 类型 说明
type boolean 0 只返回引用计数,1 同时返回对象本身

返回:array|tablearray

返回结果按类名分组,每个对象包含 refsorefs 字段;type1 时还包含 obj 字段

示例

first := new ObjectProbe(100);
second := new ObjectProbe(101);
objects := tslObjects(1);
echo length(objects["ObjectProbe"]), "\n";
restored := objects["ObjectProbe"][0, "obj"];
echo restored is class(ObjectProbe), "\n";
echo restored.add(1, 2), "\n";

type ObjectProbe = class
public
    value;
    function create(initial_value);
    begin
        value := initial_value;
    end;
    class function add(a, b);
    begin
        return a + b;
    end;
end;
// 输出:2
// 输出:1
// 输出:3