开发者

Better syntax for Scala anonymous function?

Experimenting with Scala... I'm trying to define something analogous to the "@" hack in PHP (which means, ignore any exception in the following statement).

I managed to get a definition that works:

    def ignoreException(f: () => Unit) = {
      try {
        f();
      }
      catch {
   开发者_C百科     case e: Exception => println("exception ignored: " + e);
      }
    }

And use it like this:

ignoreException( () => { someExceptionThrowingCodeHere() } );

Now here is my question... Is there anyway I can simplify the usage and get rid of the () =>, and maybe even the brackets?

Ultimately I'd like the usage to be something like this:

`@` { someExceptionThrowingCodeHere(); }


@ is reserved in Scala (for pattern matching), but would you accept @@?

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

I'm not convinced this is a good idea, however ☺


You don't have to use a function as your parameter, a "by-name" parameter will do:

def ignoreException(f: =>Unit) = {
  try {
    f
  }
  catch {
    case e: Exception => println("exception ignored: " + e)
  }
}

ignoreException(someExceptionThrowingCodeHere())

Eric.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜