transcode/next/error 返回第一个加载的值,以及该值之后的位置,这样你就可以去加载下一个值了:
>> transcode/next/error to binary! " a b c "
== [a #{2062206320}]
或者你得到一个错误,以及错误值之后的位置:
>> transcode/next/error to binary! " 1a b c "
== [make error! [
code: 200
type: 'Syntax
id: 'invalid
arg1: "integer"
arg2: "1a"
arg3: none
near: "(line 1) 1a b c "
where: [transcode]
] #{2062206320}]
但是如果要加载的值是一个块,并且块内有错误,那么
- 你得到一个错误!
- 误差值之后的位置,以及
- 块内的好值被丢弃:
像这儿
>> transcode/next/error to binary! "[ a b 1c ]"
== [make error! [
code: 200
type: 'Syntax
id: 'invalid
arg1: "integer"
arg2: "1c"
arg3: none
near: "(line 1) [ a b 1c ]"
where: [transcode]
] #{205D}]
我当前的 [*] 解决方案是更正输入字符串,然后从最后一个位置重新开始。这样我就可以重新加载整个块,一次完成。
有没有更好的方法来处理这个?
[*] 见这里https://github.com/IngoHohmann/rebol3-tools/blob/master/load-all.r3