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

次のコンソール セッションで示されているように、セット ワードには値を指定する必要があります。

a: func [] [#[unset!]] b: a ** スクリプト エラー: b には値が必要です ** Near: b: a

解決策は、set ワードの代わりに set/any を使用することです。

? set USAGE: SET ワード値 /any /pad

説明: 単語、単語のブロック、またはオブジェクトを指定された値に設定します。SET はネイティブ値です。

ARGUMENTS: word -- 設定する単語または単語 (タイプ: 任意の単語ブロック オブジェクト) value -- 値または値のブロック (タイプ: 任意のタイプ)

詳細設定: /any -- 単語を任意の値に設定できます。/pad -- オブジェクトの場合、ブロックが短すぎる場合、残りの単語は NONE に設定されます。

次のようなものを使用できます。

もしエラー?set/any 'error try [] [武装解除エラー] == なし

ところで、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 に答える