首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Vala中创建异步变差函数

如何在Vala中创建异步变差函数
EN

Stack Overflow用户
提问于 2019-03-13 04:55:40
回答 1查看 114关注 0票数 2

有没有可能在Vala中创建一个异步变量函数?如果是,是如何实现的?我在gnome网站上提供的Vala教程或任何代码示例中都找不到任何相关内容。我的结论是这是不可能的,因为vala要求异步函数有固定的参数。但是,我不知道如何实现类似于变分函数的东西。

代码示例(非异步,工作正常):

代码语言:javascript
复制
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");
}

异步代码示例(不工作):

代码语言:javascript
复制
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编译)返回的错误是

代码语言:javascript
复制
main.vala:7.28-7.30: error: Argument 2: Cannot convert from `unowned string' to `void GLib.AsyncReadyCallback? (GLib.Object?, GLib.AsyncResult)'

我的真实用例场景是(伪代码):

代码语言:javascript
复制
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());
  // ...
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-13 07:01:43

遗憾的是,这在Vala中是不可能的。Vala使用C的可变参数系统和GLib的协同例程系统。不幸的是,这两者是不兼容的。根据您的需要,您可以传递一个Variant数组。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55130520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档