возможно ли иметь статическую переменную внутри функции rebol?
Home
Вопросы и ответы
возможно ли иметь статическую переменную внутри функции rebol?
Это показывает, как иметь статическую переменную внутри объекта или контекста: http://www.mail-archive.com/[email protected] /msg04764.html
Но область видимости слишком велика для некоторых нужд, возможно ли иметь статическую переменную внутри объектной функции?
person
Rebol Tutorial
schedule
18.05.2010
source
источник
Ответы (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
person
Sunanda
schedule
18.05.2010
Или вы можете использовать FUNCTION/WITH
. Это заставляет генератор функций принимать третий параметр, который определяет постоянный объект, который используется как "я" :
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
Вы также можете ознакомиться с моей функцией FUNCS .
person
Ladislav
schedule
17.07.2010