尝试了解 DOORS DXL 解释器:就地数据

Trying to understand the DOORS DXL interpreter: in place data

我无法理解为什么解释器不接受这个:

Object co = current Object
Object o  = object(co."Absolute Number")

错误是:"incorrect arguments for function (object)" / "incorrectly concatenated tokens"。我验证了由 co."Absolute Number" 编辑的 return 类型符合 Object object(int absno[, Module m]) 的预期,因为它是根据 DXL 手册声明的:

print type(co."Absolute Number")

打印 "Integer"。貌似没问题,但显然不是。

这不是那个特定属性的问题。 co."Object Text" 应该 return 一个字符串,但是对于该属性也是如此,解释器无法识别数据类型。

在各个地方添加括号没有帮助。尝试将 returned 属性值显式转换为整数无济于事。有用的是将 returned 值存储到整数变量:

Object co = current Object
int no    = co."Absolute Number"
Object o  = object(no)

我不喜欢,因为它引入了未使用的变量。同样有效的是使用标准字符串方法:将属性值转换为字符串,然后(返回)整数:

Object o  = object(intOf(co."Absolute Number" ""))

但这对我来说太老套了。我忽略了什么?

你是对的,DXL 编译器对这样的事情有点奇怪。最好的方法是你提到的那个:

Object co = current
Object o  = object(intOf(co."Absolute Number" ""))

避免创建无关变量。另外,旁注:你注意到我在 current 之后遗漏了 Object 因为它是不必要的。

不过这也引出了一个问题...为什么您需要创建 coo,因为一旦执行,它们都是同一个对象的句柄。你可以这样做:

Object o = current

希望对您有所帮助。

错误消息出现在编译时,当 co."Absolute Number" 没有类型时,即编译器不查找预定义的属性或其类型。类型函数正确解析为绝对数字的运行时类型。 create函数继承left handside类型,在DXL中为Special