0

我想知道我们是否有任何 TACL 专家可以帮助我回答一个非常基本的问题。

你如何在你的例程中注入多个参数。

这是我目前所拥有的

[#CASE [#ARGUMENT / VALUE job_id/number /minimum [min_job], maximum [max_job]/
                               otherwise]
   |1|#output Job Number = [job_id]
   |otherwise|
   #output Bad number - Must be a number between [min_job] & [max_job]
   #return
]

有人告诉我,您需要使用第二个#ARGUMENT 语句才能使其正常工作,但我没有这样的运气让它工作。PDF 指南并没有多大帮助。

任何想法/答案都会很棒

谢谢。

4

3 回答 3

1

#CASE如果您的论点是位置性的并且属于一种类型(即您知道您得到什么以及以什么顺序),则不需要该声明。在这种情况下,您可以只使用一系列#ARGUMENT语句来获取参数。
在您的示例#ARGUMENT中,接受范围内的数字或其他任何数字 -OTHERWISE位。然后,该#CASE声明会告诉您您得到了这两个中的哪一个,1 还是 2。

#ARGUMENT可以为您进行数据验证(您可能会识别出操作系统附带的一些 TACL 例程的输出)。

所以你可以这样写:
SINK [#ARGUMENT / VALUE job_id/number /minimum [min_job], maximum [max_job]/]

SINK 只是抛弃了#ARGUMENT 的扩展,你不需要它,因为你只接受一个数字,否则失败。

于 2020-07-05T23:03:35.813 回答
0

我想出了一个方法,但如果这是最好的方法,我想知道。

似乎一个 Argument 语句需要始终在 #CASE 语句中,所以我基本上所做的只是镜像上述内容,只是将其更改为文本而不是使用整数。

如果您知道任何其他/更好的方法,请告诉我:)

于 2020-07-03T16:23:50.690 回答
0

当您要处理多种类型的参数输入时,最好使用 CASE。有点模拟了我如何看到在您与 CASE 表达式共享的上下文中使用多种参数类型:

?TACL ROUTINE

#FRAME

    #PUSH JOB_ID MIN_JOB MAX_JOB
    #SETMANY MIN_JOB MAX_JOB , 1 3
    [#DEF VALID_KEYWORDS TEXT |BODY| THISJOB THATJOB SOMEOTHERJOB]

    [#CASE
        [#ARGUMENT/VALUE JOB_ID/
            NUMBER/MINIMUM [MIN_JOB],MAXIMUM [MAX_JOB]/
            KEYWORD/WORDLIST [VALID_KEYWORDS]/
            STRING
            OTHERWISE
        ]
    | 1         |
        #OUTPUT VALID JOB NUMBER = [JOB_ID]
    | 2         |
        #OUTPUT VALID KEYWORD = [JOB_ID]
    | 3         |
        #OUTPUT VALID STRING = [JOB_ID]
    | OTHERWISE |
        #OUTPUT NOT A NUMBER, KEYWORD, OR A STRING
        #OUTPUT MUST BE ONE OF:
        #OUTPUT A NUMBER IN THE RANGE OF: [MIN_JOB] TO [MAX_JOB]
        #OUTPUT A KEYWORD IN THIS LIST: [VALID_KEYWORDS]
        #OUTPUT OR A STRING OF CHARACTERS
        #RETURN
    ]

    #OUTPUT
    #OUTPUT NOW WE ARE USING ARGUMENT [JOB_ID] !!!
    TIME

#UNFRAME
于 2020-10-05T16:06:01.920 回答