如何为Rebol结构成员分配功能

时间:2018-06-25 15:06:53

标签: ffi rebol rebol2

我首先定义一个函数ADD:

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

然后一个结构:

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

但是Rebol结构不支持该功能!数据类型。如何为Rebol结构分配功能?

1 个答案:

答案 0 :(得分:2)

回调是Rebol2的Alpha功能。有关文档,请参见卡尔的article

本质上,如果您有一个诸如test-lib.dll之类的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函数用作回调。常规中的回调!是一个关键字。块规范会自动变成structure!

这样编写回调函数,它接受库调用返回的两个整数,将它们相加然后返回。

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

然后像这样使用

>> test 1 2 :add-it
== 3