【问题标题】:Does Vala support self-invoking?Vala 是否支持自调用?
【发布时间】:2013-10-21 12:52:09
【问题描述】:

Vala 是否有任何方式支持自我调用?使用类还是使用方法?

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

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

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

【问题讨论】:

  • Vala 有委托和闭包。您可以将匿名函数存储在委托中并稍后调用该委托。您可以将委托存储在哈希映射中。这有帮助吗? dynamical loading 到底是什么意思?
  • 动态加载意味着将其存储在哈希表中以供以后使用它的事件名称调用它。我本质上是在寻找一个自动将自身添加到哈希表而不被调用的类。

标签: invoke anonymous vala self-invoking-function


【解决方案1】:
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 对此进行了测试)。

调用委托变量按预期工作:

delegate void MyDelegate();

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

【讨论】:

    猜你喜欢
    • 2018-09-25
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多