我需要一个使用PARSE
和COPY x
规则的函数,但不会x
在函数之外更改。我尝试使用FUNCTION
让它自动拾取本地x
,但它不起作用:
>> f: function [t] [parse t [copy x to end]]
>> f ["a"]
== true
>> print x
a
使用 FUNCTION,您已经成功了一半。您可以结合最近的两项更改:
所以这会给你:
;; Note the subtle change of `x` to `x:` compared to your original version:
>> f: function [t] [parse t [copy x: to end]]
>> f ["a"]
== true
>> x
** Script error: x has no value
或者,您也可以使用/local
约定显式列出局部变量:
>> f: function [t /local x] [parse t [copy x to end]]
>> f ["a"]
>> x
** Script error: x has no value
或者,或者,您可以使用固定词!在函数中,但在解析之外。
>> f: function [t] [x: none c: charset [#"a" -#"] parse t [copy x some c] print x]
>> f "a"
a
>> x
** Script error: x has no value
虽然这比其他替代方案有更多的开销,但它可能有助于调试,如果像这样使用:
>> f: function [t] [x: 10101 c: charset [#"a" -#"z"] parse t [copy x some c] print x]
>> f ""
10101
这很明显,该规则没有捕获任何东西。