xtend中的回调函数

时间:2013-07-12 03:42:52

标签: callback xtend

如何在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);

我这样做是否正确?如何在对中执行函数调用?

2 个答案:

答案 0 :(得分:0)

目前,您创建了一个Pairs列表,它将字符串映射到方法调用的结果,例如假设#isOwner返回boolean,您的列表回调目前为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>>>

答案 1 :(得分:0)

如果你有&#34;回调&#34;存储在变量中,您需要通过调用apply来调用该函数。

这是一个简单的示例,显示了一个哈希映射,其中包含两个存储在&#39; YOURS&#39;和我们的&#39;键。调用时,每个回调函数都会输出一条不同的消息并返回一个布尔值。

    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