Sick Things in Scala: Implicit Conversions of Functions

I've been having a play with seeing just how far Scala can be bent before it is broken.

My latest finding is that you can implicitly convert functions to other types.

For example:


object Sickness {
  class WrappedFunction 

implicit def functionWrapper(f : => Unit) : WrappedFunction = { System.out.println("Going to call the function") f // Essential! otherwise the conversion happens infinitely new WrappedFunction } // Have to specify the type so that the function is converted def wrapMyFunction : WrappedFunction = { System.out.println("Function called!") } // And to demonstrate... def main(args: Array[String]) { wrapMyFunction wrapMyFunction / * The above outputs: * Going to call the function * Function called! * Going to call the function * Function called! / } }

This allows for some pretty funky meta-programming-like gymnastics.

Now to find something useful for this :)

Discussion

blog comments powered by Disqus

Colin Howe

I'm Colin. I like coding, ultimate frisbee and startups. I am VP of engineering at Conversocial