Как назначить функцию члену структуры 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