我正在写一个函数f,它有几个错误陷阱,即2个错误陷阱。发生这些错误时,我会对每个错误使用stop()。我正在制作另一个测试函数test.f来检查这些错误陷阱是否正常工作。是否可以创建一个逻辑列表来检查每个错误陷阱是否正常工作,如果错误陷阱发出停止错误,则返回TRUE
例如,
assert('Number.isFinite(1)', true);
assert('Number.isFinite(1.1)', true);
assert('Number.isFinite(+0)', true);
assert('Number.isFinite(-0)', true);
assert('Number.isFinite(-1.1)', true);
assert('Number.isFinite(+Infinity)', false);
assert('Number.isFinite(-Infinity)', false);
assert('Number.isFinite(NaN)', false);
assert('Number.isFinite(null)', false);
assert('Number.isFinite(undefined)', false);
assert('Number.isFinite(true)', false);
assert('Number.isFinite(false)', false);
assert('Number.isFinite("123")', false);
assert('Number.isFinite("foo")', false);
assert('Number.isFinite(new Number(1))', false);
assert('Number.isFinite([])', false);
assert('Number.isFinite({})', false);
assert('Number.isFinite(function(){})', false);
function assert(code, expected) {
var result = eval(code);
console.log('Test ' + (result===expected ? 'PASS' : 'FAIL') + ': ', code, ' -> ', result);
}
观察结果不是我使用列表时的预期结果,但是当我使用单个元素时,结果是预期的,例如是(check.x,“error”)
f<-function(x=1,y){
if(x<0){
stop("x is negative")
}
if(missing(y)){
stop("y is missing")
}
}
test.f<-function(){
check.x<-tryCatch(f(-1,10),error=function(e) e )
check.y<-tryCatch(f(1,),error=function(e) e )
ls<-c(check.x,check.y)
ls2<-c()
for( i in ls) {
if(is(i,"error")){
ls2<-c(ls2,TRUE)
}else{
ls2<-c(ls2,FALSE)
}
}
print(is(check.x,"error"))
return(ls)
}