问题
The Vala Tutorial has an example about DBus using anonymous methods.
Bus.own_name (BusType.SESSION, "org.example.DemoService", /* name to register */
BusNameOwnerFlags.NONE, /* flags */
on_bus_aquired, /* callback function on registration succeeded */
() => {}, /* callback on name register succeeded */
() => stderr.printf ("Could not acquire name\n")); /* callback on name lost */
I am trying to rewrite this code in Genie, but could not manage to convert the two last lines. The Genie Tutorial only has an example on how to use a closure to define an event handler.
f.my_event += def (t, a)
print "event was detected with value %d", a
How do I use anonymous method definitions in a method call with Genie?
回答1:
I think there is not way. You must call another process using "def".
Bus.own_name (BusType.SESSION, "org.example.DemoService",
BusNameOwnerFlags.NONE,
on_bus_aquired,
reg,
err);
def reg()
pass
def err()
print "error"
回答2:
This isn't possible at the moment:
https://bugzilla.gnome.org/show_bug.cgi?id=746704
Currently Genie only support the deprecated lambda syntax for signals (+=). This patch provides lambda support in most constructs, the only requirement is that braces and parens need to be indent-balanced on multiple line constructs.
来源:https://stackoverflow.com/questions/24352222/how-do-valas-closures-map-to-genie