gpt4 book ai didi

dart - 如何将函数限制为某些参数?

转载 作者:行者123 更新时间:2023-12-04 07:37:11 25 4
gpt4 key购买 nike

void main() {
foo(() {});
foo((_) {});
}

void foo(Function callback) => null;
如何限制 callback只有 VoidCallbackValueChanged .目前,它接受所有类型的 Function .

最佳答案

您不能限制 callbackVoidCallback或到 ValueChanged在编译时。您可以使用运行时检查:

void foo(Function callback) {
if (callback is! VoidCallback && callback is! ValueChanged) {
throw ArgumentError(
'Only VoidCallback and ValueChanged callbacks are allowed');
}
// ...
}
但是,我不建议这样做,因为它会使您的 API 更难使用。例如,参见 Future.catchError 它同样尝试接受多种回调类型并在运行时检查它们。不幸的是,它:
  • 降低了代码的自文档性,文档可能会很尴尬。 (对于 Future 的情况,错误回调文档在 Future.then 中令人困惑。)
  • 将静态类型检查替换为运行时检查,这使得错误更难发现。

  • 在您的情况下,IMO 始终采用 ValueChanged 会更简单回调,如果不需要,调用者可以忽略参数:
    void main() {
    foo((_) {});
    foo((_) => someVoidCallback());
    }

    void foo<T>(ValueChanged<T> callback) => null;

    关于dart - 如何将函数限制为某些参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67672320/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com