【问题标题】:How to create an async variadic function in Vala如何在 Vala 中创建异步可变参数函数
【发布时间】:2019-03-12 20:55:39
【问题描述】:

是否可以在 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());
  // ...
}

【问题讨论】:

    标签: function asynchronous gtk vala variadic


    【解决方案1】:

    遗憾的是,Vala 无法做到这一点。 Vala 使用 C 的可变参数系统和 GLib 的协程系统。不幸的是,两者不兼容。根据您的需要,您可以传递Variant 的数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-19
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      • 2022-01-19
      相关资源
      最近更新 更多