Dart 我能很容易地判断'Function.apply'是否会因为参数计数不正确而失败吗?
我在web服务器中有一些将路由映射到处理程序的代码,如下所示: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
最终映射处理程序={
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个硬编码。这就意味着我们的目标不匹配