gpt4 book ai didi

ibm-midrange - RPGLE中EVAL和MOVE有什么区别

转载 作者:行者123 更新时间:2023-12-04 13:08:20 28 4
gpt4 key购买 nike

我最近进入了 IBM 的 RPG 世界,所以在编写一些代码和查看其他人的代码时,我发现有些人使用 Eval,有些人使用 Move 来完成相同的事情。它们之间有什么区别吗?

谢谢。

最佳答案

是的!这些操作码之间有很大的区别。 RPG Reference manual是一个很好的起点。

理解 RPG 是一种强类型语言很重要。给定的变量被声明为某种类型,具有一定的大小,并且在重新编译程序之前它是永久的。对于字符变量,只允许字符操作。对于数值变量,只允许进行数值运算。编译器禁止不属于变量类型的操作。

MOVE(以及变体 MOVEL 和 MOVEA)旨在在内存中移动(复制)字节。某些 MOVE 操作的一个故意副作用是在字符数据类型和数字之间进行转换。描述 MOVEx 的无数用途需要一本书,但每一个用途都与它将字节从这个内存位置移动(复制)到那个内存位置的事实密切相关。

EVAL 有一个非常不同的主要功能:EVAL 旨在评估表达式。大多数语言都允许像 BASIC 一样的表达式 LET N = X^2 + Y + Z .在旧的(非常旧的)RPG 中,没有表达式。每一行代码只做了一个计算。可以将这个数字与那个数字相加,或者将这个变量与那个数字相比较。如果我们必须在(非常老的)RPG 中实现上述计算,我们将需要类似的东西:

C   X    MULT X     N
C N ADD Y N
C N ADD Z N

使用 EVAL,我们可以这样做: EVAL N = X*X + Y + Z理解此评估需要编译器创建一些内部工作变量以保存中间结果至关重要。 numeric precision在随意转换旧代码之前,了解这些中间字段的内容很重要。那是因为固定格式代码操作 MULT 和 ADD 可能会悄悄地截断,但 EVAL 会发出溢出信号。

为什么我要花这么多时间讨论表达式和 EVAL?因为可能的表达式之一是“将此变量复制到那个变量”。 EVAL会 不是 数据类型之间的转换。如果您需要转换,您需要提供类似 %dec() 的代码。或 %editc()要做到这一点。

这就是为什么您会在最近的代码中看到使用 MOVE 的原因;有人更喜欢让编译器使用 MOVE 进行隐式类型转换,而不是编写显式表达式来使用 EVAL 进行这些转换。

顺便说一句,即使EVAL也过时了。 RPG 的当前 (7.1) 版本允许完全自由的格式规范。第 6 列中没有“规范类型”,没有/free 或/end-free:但完全自由的格式文件、数据和计算描述。像 5.4 这样的旧版本允许在/free 语句之后进行自由形式的计算。我已经有 10 年没有写过固定形式的计算线了。 EVAL 在任何当前编译器中(大部分)是可选的。

关于ibm-midrange - RPGLE中EVAL和MOVE有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22641484/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com