Dart 我能很容易地判断'Function.apply'是否会因为参数计数不正确而失败吗?

Dart 我能很容易地判断'Function.apply'是否会因为参数计数不正确而失败吗?,dart,Dart,我在web服务器中有一些将路由映射到处理程序的代码,如下所示: 最终映射处理程序={ r'/index.html':StaticFileHandler('./web'), r'/test/(\d+)/(\d+):MyTestHandler }; MyTestHandler(HttpRequest请求,int number1,int number2){ request.response.headers.contentType=新的contentType('text','html'); reques

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

最终映射处理程序={
r'/index.html':StaticFileHandler('./web'),
r'/test/(\d+)/(\d+):MyTestHandler
};
MyTestHandler(HttpRequest请求,int number1,int number2){
request.response.headers.contentType=新的contentType('text','html');
request.response.write(“$number1($number2)”;
request.response.close();
}
为了支持正则表达式作为参数,我必须使用
函数;这意味着不需要对处理程序进行开发时间检查或路由。如果正则表达式组与处理程序参数的数目错误;它像这样爆炸:

未处理的异常:
未捕获错误:参数不匹配的闭包调用:函数“调用”
NoSuchMethodError:传递给名为“call”的方法的参数数不正确
Receiver:Close:(HttpRequest,int)=>来自函数“MyTestHandler”的动态:静态。
尝试调用:call('\u HttpRequest',“2”,“3”的实例)
找到:呼叫(请求、号码)
堆栈跟踪:
对于开发者来说,这并不完全清楚哪里出了问题;因此,我宁愿抛出一个自定义错误来更容易地解释问题

是否有一种简单的方法可以检测此故障(例如获取函数期望的参数数):

  • 不要用像镜子这样的东西
  • 不涉及捕获所有异常;因为这会妨碍调试,而且处理代码的用户可能会从处理程序中调用相同的错误;我不想干扰那个错误信息

  • 您可以做的是创建一些typedef(每个可能的签名一个),然后使用
    is
    检查它们,或者您可以将参数作为数组传递

    这个答案包含一个代码示例

    (刚刚复印)

    typedef NullaryFunction();
    主要(){
    var f=null;
    print(f是空函数);//false
    f=(){};
    print(f是null函数);//true
    f=(x){};
    print(f是空函数);//false
    }
    
    不确定最后一部分的含义;但是typedef的想法可能会奏效!对每个处理程序使用相同的函数签名,比如
    MyTestHandler(HttpRequest请求,List args)
    噢,我现在明白你对数组的意思了。这将导致每个处理程序内部的实现有点笨拙(验证计数),因此我将首先尝试另一个:)这样就可以了;但是我不能动态地修改它(甚至
    也没有检查),所以我有0-10个硬编码。这就意味着我们的目标不匹配