尝试使用Scala ...我试图在PHP中定义类似于“@”hack的东西(这意味着,忽略以下语句中的任何异常)。
我设法得到一个有效的定义:
def ignoreException(f: () => Unit) = { try { f(); } catch { case e: Exception => println("exception ignored: " + e); } }
并像这样使用它:
ignoreException( () => { someExceptionThrowingCodeHere() } );
现在这是我的问题......无论如何,我可以简化用法并摆脱()=>,甚至括号吗?
最终我希望用法是这样的:
`@` { someExceptionThrowingCodeHere(); }
答案 0 :(得分:12)
@
(用于模式匹配),但您接受@@
吗?
scala> def @@(block: => Unit): Unit = try {
block
} catch {
case e => printf("Exception ignored: %s%n", e)
}
$at$at: (=> Unit)Unit
scala> @@ {
println("before exception")
throw new RuntimeException()
println("after exception")
}
before exception
Exception ignored: java.lang.RuntimeException
我不相信这是一个好主意,但是☺
答案 1 :(得分:6)
您不必使用函数作为参数,“by-name”参数将执行:
def ignoreException(f: =>Unit) = {
try {
f
}
catch {
case e: Exception => println("exception ignored: " + e)
}
}
ignoreException(someExceptionThrowingCodeHere())
埃里克。