Dart как передать универсальную функцию в изоляцию

#dart #dart-isolates

#дротик #dart-изолирует

Вопрос:

Есть ли способ передать универсальную функцию в качестве параметра изолированному объекту при появлении? Я приложил упрощенную версию своего кода (не работает), но есть ли способ архивировать это без динамики? Или тип functionToCall определяется во время выполнения, а не во время выполнения, и поэтому невозможно выбрать изоляцию?

 import 'dart:isolate';

class TestClass {
  // ...
}

void main(List<String> args) {
  ReceivePort receivePort = ReceivePort();

  Isolate.spawn(functionToCall<TestClass>, receivePort.sendPort);
}

void functionToCall<T>(SendPort sendPort) {
  // ...
}
 

Ответ №1:

Все, что касается универсального типа, известно как часть компиляции и «конкретизируется» для того, чтобы одна и та же информация была перепроверена во время выполнения.

Комментарии:

1. Хорошо, это хорошо 🙂 но как я могу передать универсальную функцию методу Isolate.spawn? Я родом из C , где нет проблем с шаблонами и использованием его, как я показал в своем примере.

2. Вероятно, вам нужен только один API для каждого изолята. Если у вас больше API, создавайте больше изолятов. 🙂

Ответ №2:

Я думаю, что проблема здесь, возможно, не столько в изолятах, сколько в том, что я не знаю ни одного способа в Dart, с помощью которого вы могли бы создать ссылку на функцию для универсальной функции.

например, вы можете вызвать, конечно, вызовите свою универсальную функцию:

 functionToCall<TestClass>(myPort);
 

Но я не понимаю, как вы можете создать ссылку на функцию для определенного типа (TestClass) и ссылку на ее функцию, которую вам тоже нужно передать в метод spawn, поэтому я думаю, что это ограничение в Dart, с которым вы сталкиваетесь здесь.