默认属性

通常,当读取不存在的属性值时,DScript 返回 null。但是,可以使用 @ 符号创建默认属性,当找不到匹配的属性时返回该默认属性。

例如,以下代码展示了 consolidate 原语的定义方式。Consolidate 用于将一组组件对象组合成一个超级对象,在超级对象中调用某个属性会返回所有子对象中所有值的总和。

consolidate(objects,...):=new _consolidate(arguments)
_consolidate(obj):={
    .objlist=obj;
    _consolidate.prototype.@=_consolidate @;
}
_consolidate @():={
    if(propname=="inputs")
        null;
    else if(propname=="outputs")
        union(flatten(user(each(x.outputs,x,.objlist))));
    else 
        sum(user(each(x[propname],x,.objlist)));
}

通过将对象列表传递给 consolidate 函数来使用此原语。这会返回一个仅包含两个属性的新对象:objlist 和 @。Objlist 包含传递给 consolidate 的所有对象的列表,@ 是默认的万能属性。因此,如果调用新超级对象的 "Total Costs" 属性,consolidate 会对 objlist 中所有对象的所有 "Total Cost" 属性值求和。

可以使用 propname 原语来检索用户所选属性的名称。

参见 propname。

参见访问对象属性