如何将对象传递给ooRexx中的函数?

时间:2018-04-17 02:57:39

标签: function arguments oorexx

我是一名长期大型机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函数之前,该对象似乎已被解析为其字符串值。奇怪的!我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:0)

嗯,这没多久。我在函数中将parse更改为use,一切都按预期工作。根据参考手册:

  

USE ARG检索程序,例程中提供的参数对象,   函数或方法,并将它们分配给变量或消息术语   分配。

     

PARSE将来自各种来源的数据分配给一个或多个变量   根据解析规则。 ...如果你指定UPPER,那么   在解析之前,要解析的字符串将转换为大写。如果   如果指定LOWER,则将字符串转换为小写。除此以外   没有翻译。

假设PARSE将参数转换为字符串,以便它可以根据请求(或默认)更改大小写。