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您正在声明一个按钮组件。单击按钮时需要调用函数。您还希望轻松自定义此函数(为不同的按钮编写不同的函数)。在这种情况下,您需要使用函数类型。颤振库为许多小部件使用函数类型:输入、按钮、手势检测器等等。