我首先定义一个函数ADD:
add: func [ a [integer!] b [integer!] ] [a + b]
然后是一个结构体:
s: make struct! [
sadd [ function! ]
] add
但是 Rebol 结构不支持 FUNCTION! 数据类型。 如何将函数分配给 Rebol 结构?
回调是 Rebol2 的一个 alpha 特性。 有关文档,请参阅 Carl 的文章。
本质上,如果你有一个像test-lib这样的dll.dll其中测试函数接受两个整数并再次返回它们不变
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