Vala是否支持自我调用?

时间:2013-10-21 12:52:09

标签: invoke anonymous vala self-invoking-function

Vala是否支持自我调用?是使用类还是使用方法?

Javascript支持自我调用,如下所示。这就是我正在寻找的。

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

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

1 个答案:

答案 0 :(得分: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 containing 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;
}