Вопрос: Что такое синтаксис типа функции дротика для объявления переменной?


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

class A<T> {
  int compare(T a, T b);
}

где compare - это функциональная переменная с соответствующим типом. Я хотел бы иметь возможность написать:

A a = new A();
a.compare = ...

5


источник


Ответы:


Вы можете использовать typedef :

typedef int Comparison<T>(T a, T b);
class A<T> {
  Comparison<T> compare;
}
main(){
  A a = new A<int>();
  a.compare = (int a, int b) => a.compareTo(b);
  print(a.compare(1, 2));
}

8



Библиотека function_types определяет типы функций с разными значениями через typedefs.

import 'package:function_types/function_types.dart';

void main() {
  Func2<int, int, int> mul = (int a, int b) => a * b;
  print(mul(3, 2));

  add = (int a, int b) => a + b;
  print(add(3, 2));
}

Func2<int, int, int> add;

В вашем случае вы можете использовать следующий код:

import 'package:function_types/function_types.dart';

void main() {
  var a = new A<String>();
  a.compare = (String a, String b) => a.compareTo(b);
  print(a.compare("A", "B"));
}

class A<T> {
  Func2<T, T, int> compare;
}

0