0

Vala 有什么方法支持自我调用?使用类还是使用方法?

Javascript 支持如下所示的自调用。这就是我要找的。

   (function(){
   // some code…
   })();

我正在尝试将一个类加载到哈希图中以进行动态加载。

4

1 回答 1

0
using Gee;

[CCode (has_target = false)]
delegate void MyDelegate();

int main() {
        var map = new HashMap<string, MyDelegate>();

        map["one"] = () => { stdout.printf("1\n"); };
        map["two"] = () => { stdout.printf("2\n"); };

        MyDelegate d = map["two"];
        d();
        return 0;
}

如果您的委托中需要一个目标,则必须编写一个包装器,请参阅以下问题: Gee HashMap contains methods as values

如您所见,您不需要自我调用。自调用看起来像这样:

int main() {
        (() => { stdout.printf("Hello world!\n"); })();
        return 0;
}

Vala 不支持此功能(我使用 valac-0.22 对此进行了测试)。

调用委托 var 按预期工作:

delegate void MyDelegate();

int main() {
        MyDelegate d = () => { stdout.printf("Hello world!\n"); };
        d();
        return 0;
}
于 2013-10-22T13:32:57.207 回答