IF … THEN … ELSEIF … ELSE … ENDIF 和属性质量
- Last UpdatedSep 24, 2024
- 1 minute read
当属性值被复制到相同类型的其它属性时,属性的质量也被复制过去了。在使用 I/O 属性时,这一点特别重要。例如,下面的两个语句同时复制了值和质量:
me.Attr2 = me.Attr1;
me.Attr2.value = me.Attr1.value;
如果只需要复制值,并且属性质量为“BAD”,则可使用临时变量来容纳值。例如:
Dim temp as Integer;
temp = me.Attr1;
me.Attr2 = temp;
如果有比较,如 Attr1 <> Attr2,并且其中一个属性质量为“BAD”,则不会执行 IF 控制块中的语句。例如,假设 Attr1 质量为“BAD”:
if me.Attr1<> me.Attr2 then
me.Attr2 = me.Attr1;
endif;
在此脚本中,不会执行语句 me.Attr2 = me.Attr1,因为 Attr1 的质量为“BAD”,而将“BAD”质量值与“Good”质量值比较是未定义的/不可能的。
建议的做法是先验证 Attr1 的质量,如以下示例所示:
if(IsBad(me.Attr1)) then
LogMessage("Attr1 quality is bad, its value is not copied to Attr2");
else
if me.Attr1<> me.Attr2 then
me.AttrA2 = me.Attr1;
endif;
endif;
验证质量的替代方法是使用“==”运算符:
if Me.Attr1 == TRUE then
或者,可以将“value”属性添加到简化的 IF THEN 语句中:
if Me.Attr1.value then
如果使用上述任意方法来验证数据质量,您的脚本将会正确执行。