【问题标题】:How do Valas closures map to Genie?Valas 闭包如何映射到 Genie?
【发布时间】:2014-08-12 16:25:40
【问题描述】:

Vala Tutorial 有一个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 */

我正在尝试在 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 的方法调用中使用匿名方法定义?

【问题讨论】:

    标签: lambda closures vala genie


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      目前这是不可能的:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-21
        • 1970-01-01
        • 2022-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多