如何在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);
我这样做是否正确?如何在对中执行函数调用?
答案 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