执行时
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 ""
为什么?
答案 0 :(得分:1)
必须为设置字提供一个值,如此控制台会话所示:
a:func [] [#[unset!]] b:a **脚本错误:b需要一个值 **近:b:a
解决方案是使用set / any而不是set word。
?组 用法: 设置字值/任意/填充
描述: 将单词,单词块或对象设置为指定值。 SET是原生值。
参数: word - 要设置的单词或单词(类型:任意单词块对象) value - 值或值块(类型:任意类型)
精化: / any - 允许将单词设置为任何值。 / pad - 对于对象,如果块太短,则剩余的单词将设置为NONE。
您可以使用以下内容:
如果有错误?设置/任何'错误尝试[] [撤防错误] ==无
顺便说一句,您可以通过http://www.rebol.org/ml-index.r上的Rebol邮件列表存档找到许多问题的答案。
答案 1 :(得分: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
]
]
答案 2 :(得分:0)
成功执行文件时,没有返回有效值。 虽然set-word需要一个值,但set / any可以接受任何值。