6

Vala 教程有一个关于使用匿名方法的 DBus的示例。

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 */

我正在尝试在 Genie 中重写此代码,但无法转换最后两行。Genie 教程只有一个关于如何使用闭包来定义事件处理程序的示例。

f.my_event += def (t, a)
    print "event was detected with value %d", a

如何在使用 Genie 的方法调用中使用匿名方法定义?

4

2 回答 2

4

我认为没有办法。您必须使用“def”调用另一个进程。

Bus.own_name (BusType.SESSION, "org.example.DemoService", 
          BusNameOwnerFlags.NONE, 
          on_bus_aquired, 
          reg,
          err);

def reg()
    pass

def err()
    print "error"
于 2015-02-09T14:56:25.643 回答
4

目前这是不可能的:

https://bugzilla.gnome.org/show_bug.cgi?id=746704

目前 Genie 仅支持已弃用的信号 (+=) lambda 语法。此补丁在大多数构造中提供 lambda 支持,唯一的要求是大括号和括号需要在多行构造上进行缩进平衡。

于 2015-07-14T10:22:59.957 回答