簡體   English   中英

如何在Vala中創建異步可變參數函數

[英]How to create an async variadic function in Vala

是否可以在Vala中創建異步可變參數函數? 如果是,怎么辦? 在gnome網站上提供的Vala教程或任何代碼示例中,我都找不到任何相關的內容。 我的結論是,這是不可能的,因為vala需要異步函數具有固定的參數。 但是然后,我不知道如何實現類似於可變參數的功能。

代碼示例(非異步,正常運行):

void long_function(string first_val, ...) {
   var list = va_list();
   string? second_val = list.arg();
   print("%s,%s\n", first_val, second_val);
}
void main() {
  long_function("a", "b");
}

異步代碼示例(無效):

async void long_function(string first_val, ...) {
    var list = va_list();
    string? second_val = list.arg();
    print("%s,%s\n", first_val, second_val);
}
void main() {
    long_function.begin("a", "b");
}

vala編譯器(編譯為: vala --pkg gio-2.0 main.vala )返回的錯誤為

main.vala:7.28-7.30: error: Argument 2: Cannot convert from `unowned string' to `void GLib.AsyncReadyCallback? (GLib.Object?, GLib.AsyncResult)'

我的實際用例場景是(偽代碼):

async void fetch_from_api_with_params(...) {
  // ExternalLibrary is a function which accepts a string with a url and any number of POST parameters
  ExternalLibrary.fetch_from_url.begin("http://example.com", va_list());
  // ...
}

遺憾的是,Vala無法做到這一點。 Vala使用C的可變參數系統和GLib的協同例程系統。 不幸的是,兩者不兼容。 根據您的需要,您可能可以傳遞Variant數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM