2013-10-21 46 views
0

Vala是否支持Self Invoking?無論是用課堂還是用方法?Vala是否支持自我調用?

JavaScript支持自我調用如下。這是我正在尋找的。

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

我試圖加載一個類到一個哈希映射動態加載。

+0

瓦拉有代表和關閉。您可以將匿名函數存儲在委託中,並稍後調用該委託。您可以將代表存儲在散列映射中。這有幫助嗎? 「動態加載」是什麼意思? –

+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

正如你所看到的,你不需要自我invokation。自我調用看起來是這樣的:

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; 
}