背景是我想要尝试多个例外。那些可以动态指定吗?
def retryOn(e:Class[_])(n: Int)(block:() => Unit):Unit = {
try {
block()
} catch {
case e1: Throwable =>
if (n > 1 && e1.isInstanceOf[e.type]) {
retryOn(e)(n - 1)(block)
}
else throw e1
}
}
从上面尝试的内容来看,这不起作用,因为抛出的e1根本没有任何debug
或类型信息。
答案 0 :(得分:2)
dynamic expando = new ExpandoObject();
expando.DoStuff = new Func<string>(() => "hello world");
// Now you can swap DoStuff with other method setting another delegate:
expando.DoStuff = new Func<string, string>(text => text + "!");
为e.type
,因此Class
无法满足您的需求。你需要e1.isInstanceOf[e.type]
而不是那里。