这显示了如何在对象或上下文中包含静态变量: http://www.mail-archive.com/list@rebol.com/msg04764.html
但是范围对于某些需求来说太大了,是否可以在对象函数中有一个静态变量?
答案 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