如何在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);我这样做正确吗?如何执行对中的函数调用?
发布于 2013-07-12 17:15:15
当前您创建了一个将字符串映射到方法调用结果的对列表,例如,假设#isOwner返回一个boolean,那么您的列表回调当前就是一个List<Pair<String, Boolean>>。
相反,您必须将#isOwner的调用包装在一个λ表达式中:
val callbacks = newArrayList(
'YOURS' -> [| you.isOwner ],
'OURS' -> [| our.isOwnder ]
);现在,回调的类型是List<Pair<String, ()=>boolean>>,或者换句话说:List<Pair<String, Functions.Function0<Boolean>>>。
发布于 2014-11-13 02:15:50
如果在变量中存储了“回调”,则需要通过在该函数上调用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 callbackhttps://stackoverflow.com/questions/17607140
复制相似问题