我是一个长期使用大型机的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函数之前,该对象似乎正在被解析为其字符串值。奇怪!我漏掉了什么明显的东西吗?
发布于 2018-04-17 03:10:23
好吧,没多久。我在函数中将parse更改为use,一切都如预期的那样工作。根据参考手册:
使用ARG检索程序、例程、函数或方法中提供的参数对象,并将它们分配给变量或消息项赋值。 解析根据解析规则将来自不同源的数据分配给一个或多个变量。..。如果指定上限,则在解析前将要解析的字符串转换为大写。如果指定LOWER,则将字符串转换为小写。否则,不进行翻译。
可以推测,解析将参数转换为字符串,以便它可以根据请求(或默认情况)更改大小写。
https://stackoverflow.com/questions/49869172
复制相似问题