是否可以在rebol函数中包含静态变量?

时间:2010-05-18 20:33:24

标签: rebol

这显示了如何在对象或上下文中包含静态变量: http://www.mail-archive.com/list@rebol.com/msg04764.html

但是范围对于某些需求来说太大了,是否可以在对象函数中有一个静态变量?

2 个答案:

答案 0 :(得分:3)

或者您可以使用FUNCTION/WITH。这使得函数生成器采用第三个参数,该参数定义了一个用作“self”的持久对象

accumulate: function/with [value /reset] [
    accumulator: either reset [
        value
    ] [
        accumulator + value
    ]
] [
    accumulator: 0
]

使用它:

>> accumulate 10
== 10

>> accumulate 20
== 30

>> accumulate/reset 0
== 0

>> accumulate 3
== 3

>> accumulate 4
== 7

您可能还想查看my FUNCS function

答案 1 :(得分:2)

在Rebol 3中,使用闭包(或CLOS)而不是功能(或FUNC)。

在Rebol 2中,假设它包含一个包含静态值的块,例如:

f: func [
   /local sb
][
     ;; define and initialise the static block
 sb: [] if 0 = length? sb [append sb 0]

     ;; demonstate its value persists across calls
 sb/1: sb/1 + 1
 print sb
 ]

    ;; sample code to demonstrate function
 loop 5 [f]
 == 1
 == 2
 == 3
 == 4
 == 5