169 lines
3.8 KiB
Markdown
169 lines
3.8 KiB
Markdown
# Builtin - 对象
|
|
|
|
## `createObject(class_name, ...)`
|
|
|
|
声明:function
|
|
|
|
创建一个已在 TSL 语言中注册的对象,类名或类类型无效时调用出错
|
|
|
|
<!-- tags: 对象 创建 实例 类 生成 object -->
|
|
|
|
| 参数 | 类型 | 说明 |
|
|
| ------------ | ----------------- | -------------------------------------------------------------- |
|
|
| `class_name` | string\|classtype | 已注册的对象类名,或通过 `class()`、`findClass()` 获得的类类型 |
|
|
| `...` | any | 可选。按顺序传给类构造函数的参数 |
|
|
|
|
返回:tslobject
|
|
|
|
### 示例
|
|
|
|
范例01:向构造函数传递参数
|
|
|
|
```tsl
|
|
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`
|
|
|
|
<!-- tags: 对象 查找 搜索 lookup 获取 查询 实例 object -->
|
|
|
|
| 参数 | 类型 | 说明 |
|
|
| ------------ | ------ | ------ |
|
|
| `class_name` | string | 类名称 |
|
|
|
|
返回:tclass\|integer
|
|
|
|
### 示例
|
|
|
|
范例01:查找脚本中声明的类
|
|
|
|
```tsl
|
|
class_value := findClass("DemoClass");
|
|
echo class_value <> 0;
|
|
// 输出:1
|
|
|
|
type DemoClass = class
|
|
end;
|
|
```
|
|
|
|
## `findClass(class_name, obj)`
|
|
|
|
声明:function
|
|
|
|
将对象转换为指定类,类不匹配时返回 `0`
|
|
|
|
<!-- tags: 对象 查找 搜索 lookup 转换 编码 实例 object -->
|
|
|
|
| 参数 | 类型 | 说明 |
|
|
| ------------ | ------ | ------------ |
|
|
| `class_name` | string | 类名称 |
|
|
| `obj` | object | 要转换的对象 |
|
|
|
|
返回:object\|integer
|
|
|
|
### 示例
|
|
|
|
范例01:转换为指定类
|
|
|
|
```tsl
|
|
obj := new DemoClass();
|
|
typed_obj := findClass("DemoClass", obj);
|
|
echo typed_obj <> 0;
|
|
// 输出:1
|
|
|
|
type DemoClass = class
|
|
end;
|
|
```
|
|
|
|
## `objectstate(obj_name)`
|
|
|
|
声明:function
|
|
|
|
返回对象当前所处的生命周期状态
|
|
|
|
<!-- tags: 对象 状态 生命周期 构造 析构 运行时 introspection object -->
|
|
|
|
| 参数 | 类型 | 说明 |
|
|
| ---------- | ------ | ---------------- |
|
|
| `obj_name` | object | 要检查状态的对象 |
|
|
|
|
返回:integer
|
|
|
|
状态编码:`1` 表示构造中,`2` 表示构造完成,`3` 表示析构中,`4` 表示析构完成,`0` 表示未知状态,`-1` 表示参数不是对象
|
|
|
|
### 示例
|
|
|
|
```tsl
|
|
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 对象的引用信息,可选取回对象本身
|
|
|
|
<!-- tags: 对象 枚举 引用计数 生命周期 运行时 introspection object -->
|
|
|
|
| 参数 | 类型 | 说明 |
|
|
| ------ | ------- | ---------------------------------------- |
|
|
| `type` | boolean | `0` 只返回引用计数,`1` 同时返回对象本身 |
|
|
|
|
返回:array\|tablearray
|
|
|
|
返回结果按类名分组,每个对象包含 `refs`、`orefs` 字段;`type` 为 `1` 时还包含 `obj` 字段
|
|
|
|
### 示例
|
|
|
|
```tsl
|
|
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
|
|
```
|