我是一名长期大型机Rexx程序员,正在尝试ooRexx中的对象。结果令人惊讶。例如,这是一个程序:
#!/usr/bin/rexx
a = .number~new(3.14)
say "a =" a
say "a~val =" a~val
call say_number a
exit 0
say_number:
procedure
parse arg num
say "In say_number"
say "num =" num
say "num~val =" num~val
return
::class number public
::attribute val get public
::method init ; expose val ; use arg val
::method new ; expose val ; use arg val
::method string ; return "'"self~val"'"
结果是:
> number
a = '3.14'
a~val = 3.14
In say_number
num = '3.14'
18 *-* say "num~val =" num~val
8 *-* call say_number a
REX0097E: Error 97 running /home/tony/bin/.scripts/number line 18: Object method not found
REX0476E: Error 97.1: Object "'3.14'" does not understand message "VAL"
在将对象传递给say_number
函数之前,该对象似乎已被解析为其字符串值。奇怪的!我错过了一些明显的东西吗?
答案 0 :(得分:0)
嗯,这没多久。我在函数中将parse
更改为use
,一切都按预期工作。根据参考手册:
USE ARG检索程序,例程中提供的参数对象, 函数或方法,并将它们分配给变量或消息术语 分配。
PARSE将来自各种来源的数据分配给一个或多个变量 根据解析规则。 ...如果你指定UPPER,那么 在解析之前,要解析的字符串将转换为大写。如果 如果指定LOWER,则将字符串转换为小写。除此以外 没有翻译。
假设PARSE将参数转换为字符串,以便它可以根据请求(或默认)更改大小写。