1

我首先定义一个函数ADD:

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

然后是一个结构:

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

但是 Rebol struct 不支持 FUNCTION! 数据类型。如何将函数分配给 Rebol 结构?

4

1 回答 1

2

回调是 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
于 2018-06-26T07:27:36.710 回答