2

第15章を読みました: http://www.rebol.com/docs/core23/rebolcore-15.html#section-8 "

spacer: charset reduce [tab newline #" "]
spaces: [some spacer]
rule: ["a" spaces "b" spaces "c"]
parse/all "a b c" rule

は問題ありませんが、ルールを次のように変更すると

rule: ["a" spaces copy varb to spaces "c"]
parse/all "a b c" rule

Rebol コンソール出力エラー:

** Script Error: Invalid argument: some spacer
** Where: halt-view
** Near: parse/all "a b c" rule
>>

なんで ?

ありがとう。

4

1 に答える 1

4

REBOL 2 では、PARSE の TO 操作の引数を複雑なルールにすることはできません。リテラル値または文字セットでなければなりません。コード[to spaces]は同等で[to [some spacer]]あり、それは機能しません。あなたの例では、に変換することができ、[to spaces]うまく[to spacer spaces]動作するはずです。

これを回避するための秘訣がありますが、ほとんどの場合、非スペーサーがスペーサー文字セットの補数に[to [some spacer]]なるようにリファクタリングする必要があります。[any non-spacer]

これは REBOL 3 で修正される予定ですが、その修正はまだ行われておらず、文字セットの補完は Unicode のためにうまく機能しません。今のところREBOL 2に固執してください。

于 2009-06-30T19:43:33.297 に答える