Можно ли создать в Vala асинхронную переменную функцию?Если да, то как?Я не смог найти ничего похожего в учебнике по Vala, представленном на сайте gnome или в каком-либо примере кода.Мой вывод заключается в том, что это невозможно, потому что 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());
// ...
}