1

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

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

错误是:"incorrect arguments for function (object)" / "incorrectly concatenated tokens"。我验证了返回的类型与根据 DXL 手册声明co."Absolute Number"的预期相匹配:Object object(int absno[, Module m])

print type(co."Absolute Number")

打印"Integer"。看起来很好,但显然不是。

这不是该特定属性的问题。co."Object Text"应该返回一个字符串,但同样具有该属性,解释器无法识别数据类型。

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

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

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

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

但这对我来说相当hacky。我忽略了什么?

4

2 回答 2

1

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

于 2016-06-18T12:28:28.403 回答
1

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

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

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

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

Object o = current

希望这可以帮助。

于 2015-08-05T14:22:51.277 回答