1

如何在 xtend 中调用回调函数?

我正在寻找与 C 中的类似的东西。示例:

    struct callbacks
    {
      char name[10];
      boolean (*pfState)();
    };

    static const struct callbacks call[] = {
      {"YOURS", &isOwner},
      {"OURS", &our_owner}
    };

所以,我会这样称呼它:call[0].pfState().

我在 xtend 中创建了一个类似的 ArrayList。

    val you = new youModule()
    val our = new ourModule()
    val callbacks = newArrayList('YOURS' -> you.isOwner, 'OURS' -> our.isOwnder);

我这样做正确吗?如何执行对中的函数调用?

4

2 回答 2

0

目前,您创建了一个 Pairs 列表,它将字符串映射到方法调用的结果,例如,假设#isOwner返回 a boolean,您的列表回调当前是 a List<Pair<String, Boolean>>

相反,您必须将 的调用包装#isOwner在 lambda 表达式中:

val callbacks = newArrayList(
  'YOURS' -> [| you.isOwner ],
  'OURS' -> [| our.isOwnder ]
);

现在,回调具有类型List<Pair<String, ()=>boolean>>,或者换句话说:List<Pair<String, Functions.Function0<Boolean>>>

于 2013-07-12T09:15:15.227 回答
0

如果您在变量中存储了“回调”,则需要通过调用该函数来调用该函数apply

这是一个简单的示例,显示了一个哈希映射,其中包含存储在“YOURS”和“OURS”键下的两个回调。调用时,每个回调函数都会打印不同的消息并返回一个布尔值。

    val callbacks = newHashMap(
      'YOURS' -> [| println("calling the first callback");  true  ],
      'OURS'  -> [| println("calling the second callback"); false ]
    )

    val result = callbacks.get("YOURS").apply

// result is: true
// console output is: calling the first callback
于 2014-11-12T18:15:50.313 回答