为什么可以在泛型函数上使用getter,以及如何使用它?
T MyGenericFunc<T>(T x) {return x;} get what {
print("what");
}
main(){
var s = MyGenericFunc<String>("hey");
print(s);
// how to use the getter?
}
为什么可以在泛型函数上使用getter
"Getter on a generic function";听起来像胡说八道。您的示例是一个getter,返回一个泛型函数。
在大多数情况下,您可能不想要一个返回函数的getter;你只需要直接定义一个函数。例如,这样做毫无意义:
num Function(num x) get square {
return (x) => x * x;
}
当你可以写:
num square(num x) {
return x * x;
}
与呼叫者没有区别:在任何一种情况下,他们都只会呼叫,例如square(3)
。
但是,如果getter在调用返回函数之前确实工作了,则可能会有所不同。例如:
num Function(num x) get square {
print('square');
return (x) => x * x;
}
void main() {
var f = square; // Prints: square
print('Hello world!');
var result = f(3); // Does not print.
print(result); // Prints: 9
}
将打印:
square
Hello world!
9
相比之下:
num square(num x) {
print('square');
return x * x;
}
void main() {
var f = square; // Does not print.
print('Hello world!');
var result = f(3); // Prints: square
print(result); // Prints: 9
}
将打印:
Hello world!
square
9
在你的相关问题的例子中,getter设置了一个内部标志(我不知道是为了什么目的(。
如何使用它?
你可以像函数一样调用它。在您的示例中,由于what
是一个返回泛型函数的getter,因此您可以将其称为what<DesiredType>(argument)
。