默认属性
通常,当读取不存在的属性值时,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。
参见访问对象属性。