分类:
2011-11-23 00:53:18
原文地址:RPG编程技巧1_EVAL和MOVE的作用与区别 作者:狂想程序员
AS400中,常用的赋值指令是EVAL和MOVE。如果不清楚两者的区别,就不利于程序开发,因为错误的使用容易产生逻辑错误。下面总结一下两者的特点与区别,尽可能通俗易懂。
1.MOVE操作的两个变量可以不是同一类型的,即允许一个为字符,一个为数字,赋值方向是从右向左(MOVEL从左向右赋值)。而EVAL操作的两个变量必须是同一类型的,赋值方向是从左向右。
2.在 MOVE 操作中,允许对Result 字符进行定义,而EVAL不具备这种灵活的功能。
3.MOVE 使用的是覆盖方式赋值,即没有被覆盖的位保留原值。而EVAL在赋值之前,要把被赋值变量清空。
4.MOVE相比EVAL的最大优势是可以实现字符和数字之间的灵活转换。针对这一点,需要明白字符的空位是空字符,空字符也是一个字符。数字的前面若有空位,在数字赋值到字符型变量时,前面的空位不再是0,而是空字符。字符的后面若有空位,在字符赋值到数字型变量时,后面的空位系统会自动做补零处理。 所以通常,字符转数字时,长度最好保持一致,以免得赋值时有意外。
5.日期、时间型变量与字符、数字的转换中,MOVE可以起到类似内置函数%Time的功能。针对这一点,我们要注意数字转化为日期和时间,可以不要时间格式的间隔符;但是字符转化为日期和时间,则需要时间格式的间隔符。
6.用EVAL实现两个数字型变量的赋值,如果变量被赋值到更短的变量中,系统会报错。
7.EVAL可以实现字符的拼接,MOVE不具备此功能。
8.EVAL除了能实现数学运算,还能四舍五入:对于数字运算,EVAL(H),是四舍五入的运算;而EVAL,仅仅只是四舍,没有五入。