Как назначить функцию члену структуры Rebol

Я сначала определяю функцию ADD:

add: func [ a [integer!] b [integer!] ] [a + b]

Тогда структура:

s: make struct! [
    sadd [ function! ]
] add

Но структура Rebol не поддерживает ФУНКЦИЮ! тип данных. Как я могу назначить функцию для структуры Rebol?

1 ответ

Обратные вызовы - это особенность Rebol2. См. Статью Карла для документации.

По сути, если у вас есть dll, такая как test-lib.dll, где функция test берет два целых числа и возвращает их снова без изменений

extern "C"
MYDLL_API int test(int a, int b, int (*pFunc)(int, int))
{
   int result = pFunc(a, b);
   return result;
}

вы бы написали вызывающую функцию из Rebol, как это

test: make routine! [
    a [int]
    b [int]
    c [callback [int int return: [int]]]
    return: [int]
] test-lib "test"

Итак, эта тестовая функция принимает два целых числа в качестве параметров и третий параметр, который является функцией Rebol, которая будет использоваться в качестве обратного вызова. Обратный звонок в рутине! это ключевое слово. Спецификация блока автоматически превращается в структуру!

Функция обратного вызова написана следующим образом: она берет два целых числа, возвращаемых библиотечным вызовом, добавляет их и возвращает их.

add-it: func [a b][return a + b]

И тогда он используется так

>> test 1 2 :add-it
== 3
Другие вопросы по тегам