dart-typedef 相同签名函数的别名(返回值不是签名一部分)

600 阅读1分钟
typedef ManyOperation(int firstNo , int secondNo);
//function signature  

Add(int firstNo,int second){
   print("Add result is ${firstNo+second}");
}
Subtract(int firstNo,int second){
   print("Subtract result is ${firstNo-second}");
}
Divide(int firstNo,int second){
   print("Divide result is ${firstNo/second}");
}  
Calculator(int a, int b, ManyOperation oper){
   print("Inside calculator");
   oper(a,b);
}  
void main(){
   ManyOperation oper = Add;
   oper(10,20);
   oper = Subtract;
   oper(30,20);
   oper = Divide;
   oper(50,5);
}

如果 typedef 变量尝试指向具有不同函数签名的函数,则上述代码将导致错误。

typedef Fly = void Function(int value);
void main(){
 Bird bird = Bird((int a){print(a);});//如果实参函数的类型不是该类型的话 编译不通过
 bird.fly(3);
}
/// (int a){print(a);} 签名和 void Function(int value) 相同

class Bird{
 Fly fly;//类型是Fly 一个只有一个整形参数的函数
 Bird(this.fly);
}


typedef OnSuccessList<T>(List<T> banners);

typedef OnSuccess<T>(T banners);

typedef OnFail(String message);