Valas的封口如何映射到Genie?

时间:2014-06-22 14:26:21

标签: lambda closures vala genie

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

我正在尝试在Genie中重写此代码,但无法设法转换最后两行。 Genie Tutorial只有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

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

2 个答案:

答案 0 :(得分:4)

我认为没有办法。您必须使用" def"。

调用另一个进程
Bus.own_name (BusType.SESSION, "org.example.DemoService", 
          BusNameOwnerFlags.NONE, 
          on_bus_aquired, 
          reg,
          err);

def reg()
    pass

def err()
    print "error"

答案 1 :(得分:4)

目前无法做到这一点:

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

  

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