3

我需要一个使用PARSECOPY x规则的函数,但不会x在函数之外更改。我尝试使用FUNCTION让它自动拾取本地x,但它不起作用:

>> f: function [t] [parse t [copy x to end]]
>> f ["a"]
== true
>> print x
a
4

2 回答 2

3

使用 FUNCTION,您已经成功了一半。您可以结合最近的两项更改:

  1. FUNCTION 自动收集正文中使用的所有 set-word!s 作为局部变量。
  2. PARSE 的 COPY 和 SET 规则已经放宽,也可以接受 set-word!s 作为它们的第一个参数。

所以这会给你:

;; 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
于 2014-03-12T13:56:37.243 回答
2

或者,或者,您可以使用固定词!函数中,但在解析之外

>> 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

这很明显,该规则没有捕获任何东西。

于 2014-03-12T14:37:26.483 回答