gpt4 book ai didi

dart - 我可以轻松判断 `Function.apply`是否由于参数计数错误而失败?

转载 作者:行者123 更新时间:2023-12-03 02:51:22 24 4
gpt4 key购买 nike

我在网络服务器中有一些代码将路由映射到处理程序中,如下所示:

final Map<String, Handler> handlers = {
r'/index.html': StaticFileHandler('./web'),
r'/test/(\d+)/(\d+)': MyTestHandler
};

MyTestHandler(HttpRequest request, int number1, int number2) {
request.response.headers.contentType = new ContentType('text', 'html');
request.response.write('<h1>$number1 ($number2)</h1>');
request.response.close();
}

为了支持将正则表达式作为参数,我必须在提取参数后使用 Function.apply。这意味着没有开发时检查或针对处理程序的路由。如果输入的正则表达式组与处理程序参数的数量错误,它像这样爆炸:

Unhandled exception:
Uncaught Error: Closure call with mismatched arguments: function 'call'

NoSuchMethodError: incorrect number of arguments passed to method named 'call'
Receiver: Closure: (HttpRequest, int) => dynamic from Function 'MyTestHandler': static.
Tried calling: call(Instance of '_HttpRequest', "2", "3")
Found: call(request, number)
Stack Trace:

对于开发人员来说,这并不完全是问题所在。所以我宁愿抛出一个自定义错误,以更轻松地解释问题。

有没有一种简单的方法可以检测到此故障(例如,获取函数期望的参数数量),该方法是:
  • 不使用像Mirrors那样的笨重工具
  • 不涉及捕获所有异常;因为这将阻止调试,并且用户处理代码可能会在处理程序中调用同一错误;而且我不想干扰该错误消息
  • 最佳答案

    您可以做的是创建一些typedef(每个可能的签名一个),然后使用is对其进行检查,也可以将参数作为数组传递。

    此答案包含一个代码示例https://stackoverflow.com/a/22653604/217408

    (仅复制)

    typedef NullaryFunction();

    main () {
    var f = null;
    print(f is NullaryFunction); // false
    f = () {};
    print(f is NullaryFunction); // true
    f = (x) {};
    print(f is NullaryFunction); // false
    }

    关于dart - 我可以轻松判断 `Function.apply`是否由于参数计数错误而失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25961355/

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