我不明白这是怎么回事。
在类里:
Function(int) get myGet {
return myStream.sink.add;
}
及其在屏幕中的实现:
myObject.myGet(33);
并将数字添加到流中。
最佳答案
当您调用myGet
时,您实际上是在调用myStream.shink.add
。
void add(int a) {
...
}
和
Function(int) add = (int a) {
...
}
是一样的东西。
函数也是一种类型。函数名称(例如
myStream.shink.add
,myObject.myGet
,print
,...)是指针常量(因为您无法在dart上将其他函数分配给print
),指向内存中匹配函数的地址。PS:在javascript中,预定义函数就像变量而不是常量,因为您可以使用自己的处理程序更改默认函数(例如console.log)。
当您调用
print
时,编译器会更改打印并带有匹配的函数地址,而当您调用print('Hello')
时,会将参数发送到该地址。在您的情况下,同样的事情也会发生。但不是在编译时,而是在运行时。myGet
是一个getter返回函数指针的类型。在运行时,当您调用myGet
时,它将返回myStream.shink.add
的地址。在函数调用后添加括号。由于您正在调用myGet
,并且它指向myStream.shink.add
,因此您实际上是在调用myStream.shink.add(33)
。基本上:
myObject.myGet = myStream.sink.add;
您可以read more about function pointers here。
关于flutter - Flutter/Dart:具有参数的 setter/getter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60499028/