Flutter 颤振/飞镖:带有参数的getter
我不明白这是怎么回事。 在课堂上:Flutter 颤振/飞镖:带有参数的getter,flutter,dart,Flutter,Dart,我不明白这是怎么回事。 在课堂上: Function(int) get myGet { return myStream.sink.add; } 及其在屏幕中的实现: myObject.myGet(33); 并将号码添加到流中。当您调用myGet时,您实际上正在调用myStream.shink.add void添加(int a){ ... } 及 函数(int)add=(int a){ ... } 都是一样的东西 函数也是一种类型。函数名(例如:myStream.shink.add,
Function(int) get myGet {
return myStream.sink.add;
}
及其在屏幕中的实现:
myObject.myGet(33);
并将号码添加到流中。当您调用
myGet
时,您实际上正在调用myStream.shink.add
void添加(int a){
...
}
及
函数(int)add=(int a){
...
}
都是一样的东西
函数也是一种类型。函数名(例如:myStream.shink.add
,myObject.myGet
,print
,…)是指向内存中匹配函数地址的指针常量(因为您无法为dart上的print
分配另一个函数)
PS:在javascript中,预定义函数类似于变量而不是常量,因为您可以使用自己的处理程序更改默认函数(例如:console.log)
当您调用print
编译器使用匹配的函数地址更改print时,以及当您调用print('Hello')
时,您的参数将发送到该地址。在你的情况下,同样的事情也会发生。但不是在编译时,而是在运行时
myGet
是一个getter返回函数指针的类型。在运行时,当您调用myGet
时,它返回myStream.shink.add
的地址。在函数调用后添加括号。因为您正在调用myGet
并且它指向myStream.shink.add
您实际上正在调用myStream.shink.add(33)
基本上:
myObject.myGet=myStream.sink.add;
你可以。为什么不做一个公开的活动呢
void add(int x) => myStream.sink.add(x);
非常感谢。顺便问一下,什么时候或者为什么需要使用它?例如,ROB您正在声明一个按钮组件。单击按钮时需要调用函数。您还希望轻松自定义此函数(为不同的按钮编写不同的函数)。在这种情况下,您需要使用函数类型。颤振库为许多小部件使用函数类型:输入、按钮、手势检测器等等。