DAS 脚本 NewUserObj:自定义对象与结构化状态
用对象组织配置、观察结果和状态,理解初始化与替换。
从零散变量到一条记录
前置知识:对象访问与共享变量。NewUserObj 创建可自定义属性的对象,把属于同一件事的数据组织在一起。它不会自动验证结构、定义类或持久保存内容。先指定对象所有者,再写出结构约定。
创建完整的观察记录
Advanced Script · 仅修改本地对象状态。整段手动执行,数值均为虚构测试输入。
示例代码
$feObservation = NewUserObj();
$feObservation.schema = 1;
$feObservation.symbol = "MSFT";
$feObservation.bid = 20.10;
$feObservation.ask = 20.14;
$feObservation.valid = 0;
$feObservation.spread = 0;
if ($feObservation.bid > 0) {
if ($feObservation.ask >= $feObservation.bid) {
$feObservation.spread = $feObservation.ask - $feObservation.bid;
$feObservation.valid = 1;
}
}
$feObservation.ShowObject();
读取、写入与替换
schema 是我们定义的记录结构版本,不是 DAS 版本开关。依赖字段填好后,valid 才变为 1;读取者先检查 valid,再使用 spread。给变量重新赋 NewUserObj 是替换它所指向的对象,不代表其他旧引用同步消失。手册未完整说明别名与深拷贝,不应把 $b=$a 当成已记录的对象克隆方法。
方法与结构演进
固定字段用 obj.field 易读;键名本身是数据时用 Set/Get。Del(key) 删除某项,Del("*") 清空对象属性。将 spread 改为 spreadDollars 时,应同时更新使用者或增加结构版本;不能靠缺失属性的未知行为完成迁移。配置和实时观察的重置时机不同,适合分成两个对象。
练习与参考解答
为假设价格 8.25、数量 40 的记录增加 notional。参考解答:先设 valid=0、notional=0,检查价格与数量为正,计算 330,再发布 valid=1。第二次输入无效时不能将上次 330 保持为有效状态。分别测试整体重新初始化和只更新单个字段。