0

执行时

do-file: func[file][
  if error? error: try [
    if (find [%.r %.cgi] (suffix? file)) [
      do file
    ]
  ][
    disarm error
    print ["error executing " file]
    input
  ]
]


foreach-file: func [
    "Perform function on each file in selected directory recursively"
    dir [file! url!] "Directory to look in"
    act [function!] "Function to perform (filename is unput to function)"
    /directory "Perform function also on directories"
    /local f files
][
    if not equal? last dir #"/" [
      dir: to-rebol-file join dir #"/"
    ]
    files: attempt [read dir]
    either none? files [return][
        foreach file files [
            f: join dir file
            either dir? f [
                either directory [
                    act f
                    foreach-file/directory f :act
                ][
                    foreach-file f :act
                ]
            ][act f]
        ]
    ]
]

feach-file %test/ :do-file

其中 %test 将包含一个只有 rebo 标头的文件:

rebol []

程序因错误而停止,而不是解除错误!

如果文件包含类似的内容,它不会给出错误

rebol []

test: context []

但如果它包含它会再次失败

rebol []

print ""

为什么 ?

4

3 回答 3

1

必须为 set word 提供一个值,如此控制台会话所示:

a: func [] [#[unset!]] b: a ** 脚本错误: b 需要一个值 ** Near: b: a

解决方案是使用 set/any 而不是 set word。

? 设置用法:设置字值 /any /pad

描述:将单词、单词块或对象设置为指定值。SET 是一个原生值。

ARGUMENTS: word -- 要设置的单词或单词(类型:任意单词块对象) value -- 值或值块(类型:任意类型)

改进:/any -- 允许将单词设置为任何值。/pad -- 对于对象,如果块太短,剩余的单词设置为 NONE。

你可以使用类似的东西:

如果错误?set/any 'error try [] [disarm error] == none

顺便说一句,您可以通过位于http://www.rebol.org/ml-index.r的 Rebol 邮件列表存档找到许多问题的答案。

于 2009-11-24T10:50:36.913 回答
0
do-file: func [ file
  /local err
][
  if error? set/any 'err try [
    if find [%.r %.cgi] suffix? file [
      do file
    ]
  ][
    print ["error executing " file]
    print mold disarm err
  ]
]

那些括号是不必要的。

这是另一种风格

do-file: func [file] [
    /local err
] [
    if error? set/any 'err try [
        all [
            find [%.r %.cgi] suffix? file
            do file
        ]
    ] [
        print ["error executing " file]
        print mold disarm err
    ]
]
于 2009-12-28T04:16:48.800 回答
0

成功执行文件时没有返回有效值。虽然 set-word 需要一个值,但 set/any 可以接受任何值。

于 2011-07-22T14:04:15.637 回答