возможно ли иметь статическую переменную внутри функции 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
comment
Умно, спасибо. (Я все еще использую R2, поскольку R3, похоже, не работает с моим компьютером) - person Rebol Tutorial; 19.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
comment
Исправлял исправление имени FUNCT и добавил пример использования аккумулятора. (в соответствии с политикой разрешено добавлять примеры к ответам) Нет одобрения со стороны @Ladislav явное или подразумеваемое. :-) - person HostileFork says dont trust SE; 16.02.2014